aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Robert Phillips <robertphillips@google.com>2018-05-18 12:43:27 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-18 18:55:14 +0000
commitab0795c4dd2c138c3037a4f22d2b762b449ec460 (patch)
tree1b1ef8e353c376701aa5ba58728a0e35cf3b1744 /src
parent30e1a5edda30b32d9c7c8c69ac4fb19c89d88c37 (diff)
Fix fuzzer bug i.e., compute the correct repeated dst domain
BUG: oss-fuzz:8367 Change-Id: Ib5a9bf6e8446459db88016176e4c22397a3f1965 Reviewed-on: https://skia-review.googlesource.com/129184 Reviewed-by: Herb Derby <herb@google.com> Commit-Queue: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/effects/SkMatrixConvolutionImageFilter.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp
index 153c6f4c48..848676afaf 100644
--- a/src/effects/SkMatrixConvolutionImageFilter.cpp
+++ b/src/effects/SkMatrixConvolutionImageFilter.cpp
@@ -403,15 +403,16 @@ sk_sp<SkSpecialImage> SkMatrixConvolutionImageFilter::onFilterImage(SkSpecialIma
dstBounds.offset(-inputOffset);
srcBounds.offset(-inputOffset);
- SkIRect interior = SkIRect::MakeXYWH(dstBounds.left() + fKernelOffset.fX,
- dstBounds.top() + fKernelOffset.fY,
- dstBounds.width() - fKernelSize.fWidth + 1,
- dstBounds.height() - fKernelSize.fHeight + 1);
-
+ SkIRect interior;
if (kRepeat_TileMode == fTileMode) {
- // In repeat mode the above computation of interior can exceed the bounds of 'dst'.
- interior.sort();
- interior.intersect(dstBounds);
+ // In repeat mode, the filterPixels calls will wrap around
+ // so we just need to render 'dstBounds'
+ interior = dstBounds;
+ } else {
+ interior = SkIRect::MakeXYWH(dstBounds.left() + fKernelOffset.fX,
+ dstBounds.top() + fKernelOffset.fY,
+ dstBounds.width() - fKernelSize.fWidth + 1,
+ dstBounds.height() - fKernelSize.fHeight + 1);
}
SkIRect top = SkIRect::MakeLTRB(dstBounds.left(), dstBounds.top(),