Use SkSafeMath to calculate memory sizes.
BUG=chromium:749147
Change-Id: I07d18e089be1138ad83bfde392c7daf2d01d388c
Reviewed-on: https://skia-review.googlesource.com/34747
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
diff --git a/src/core/SkMaskBlurFilter.cpp b/src/core/SkMaskBlurFilter.cpp
index 43616c3..14147f0 100644
--- a/src/core/SkMaskBlurFilter.cpp
+++ b/src/core/SkMaskBlurFilter.cpp
@@ -10,6 +10,7 @@
#include <cmath>
#include "SkMakeUnique.h"
+#include "SkSafeMath.h"
static const double kPi = 3.14159265358979323846264338327950288;
@@ -109,8 +110,12 @@
size_t srcW = src.fBounds.width();
size_t srcH = src.fBounds.height();
- size_t dstW = srcW + 2 * borderW;
- size_t dstH = srcH + 2 * borderH;
+ SkSafeMath safe;
+
+ // size_t dstW = srcW + 2 * borderW;
+ size_t dstW = safe.add(srcW, safe.add(borderW, borderW));
+ //size_t dstH = srcH + 2 * borderH;
+ size_t dstH = safe.add(srcH, safe.add(borderH, borderH));
dst->fBounds.set(0, 0, dstW, dstH);
dst->fBounds.offset(src.fBounds.x(), src.fBounds.y());
@@ -124,7 +129,13 @@
return {SkTo<int32_t>(borderW), SkTo<int32_t>(borderH)};
}
- dst->fImage = SkMask::AllocImage(dstW * dstH);
+ size_t toAlloc = safe.mul(dstW, dstH);
+ if (!safe) {
+ // There is no border offset because we are not drawing.
+ return {0, 0};
+ }
+ dst->fImage = SkMask::AllocImage(toAlloc);
+
if (weightW > 1 && weightH > 1) {
// Blur both directions.