diff options
author | 2018-05-18 12:43:27 -0400 | |
---|---|---|
committer | 2018-05-18 18:55:14 +0000 | |
commit | ab0795c4dd2c138c3037a4f22d2b762b449ec460 (patch) | |
tree | 1b1ef8e353c376701aa5ba58728a0e35cf3b1744 /src | |
parent | 30e1a5edda30b32d9c7c8c69ac4fb19c89d88c37 (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.cpp | 17 |
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(), |