diff options
author | Robert Phillips <robertphillips@google.com> | 2016-12-19 11:37:37 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-12-19 17:14:10 +0000 |
commit | 98624d249d279f68127c76754d542ab5cd0f8eab (patch) | |
tree | 86e5e534316aed3dd95001b32180f0df72e23ffd /src/effects/SkBlurMaskFilter.cpp | |
parent | efa9d34ccbdeb541a1fa77a678552df7a08531be (diff) |
"Fix" some ImageFilter fuzzer issues
SkClipOp.h & SkPictureFlat.h
Invalid SkClipOps were getting through - the question here is where (for a class enum) is a good place to put the k*Mask definition.
SkPath1DPathEffect
NaNs were getting past.
SkBlurMaskFilter
Assert wasn't necessary since we whacked the flag on the next line.
Change-Id: I87f95ad39f4760284f881d7c4500eb82fcdba282
Reviewed-on: https://skia-review.googlesource.com/6194
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Herb Derby <herb@google.com>
Diffstat (limited to 'src/effects/SkBlurMaskFilter.cpp')
-rw-r--r-- | src/effects/SkBlurMaskFilter.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp index 84d9e18703..f56c273211 100644 --- a/src/effects/SkBlurMaskFilter.cpp +++ b/src/effects/SkBlurMaskFilter.cpp @@ -128,14 +128,12 @@ const SkScalar SkBlurMaskFilterImpl::kMAX_BLUR_SIGMA = SkIntToScalar(128); sk_sp<SkMaskFilter> SkBlurMaskFilter::Make(SkBlurStyle style, SkScalar sigma, const SkRect& occluder, uint32_t flags) { + SkASSERT(!(flags & ~SkBlurMaskFilter::kAll_BlurFlag)); + SkASSERT(style <= kLastEnum_SkBlurStyle); + if (!SkScalarIsFinite(sigma) || sigma <= 0) { return nullptr; } - if ((unsigned)style > (unsigned)kLastEnum_SkBlurStyle) { - return nullptr; - } - SkASSERT(flags <= SkBlurMaskFilter::kAll_BlurFlag); - flags &= SkBlurMaskFilter::kAll_BlurFlag; return sk_sp<SkMaskFilter>(new SkBlurMaskFilterImpl(sigma, style, occluder, flags)); } @@ -735,7 +733,12 @@ void SkBlurMaskFilterImpl::computeFastBounds(const SkRect& src, sk_sp<SkFlattenable> SkBlurMaskFilterImpl::CreateProc(SkReadBuffer& buffer) { const SkScalar sigma = buffer.readScalar(); const unsigned style = buffer.readUInt(); - const unsigned flags = buffer.readUInt(); + unsigned flags = buffer.readUInt(); + + buffer.validate(style <= kLastEnum_SkBlurStyle); + buffer.validate(!(flags & ~SkBlurMaskFilter::kAll_BlurFlag)); + + flags &= SkBlurMaskFilter::kAll_BlurFlag; SkRect occluder; if (buffer.isVersionLT(SkReadBuffer::kBlurMaskFilterWritesOccluder)) { |