diff options
author | 2014-10-30 14:05:14 -0700 | |
---|---|---|
committer | 2014-10-30 14:05:15 -0700 | |
commit | 9bde31e95ddd82a4a923275bb01265740407dab1 (patch) | |
tree | 217a431fce925cb4ad2d50167bf502ce6f52144e /src | |
parent | e228ba3e5cab59034875ea6599527aab30f04623 (diff) |
Trying to be consistent when members are allowed to be NULL
Got a few crashes running the fuzzer locally, all related to handling NULL members/parameters in an inconsistent way.
BUG=skia:
Review URL: https://codereview.chromium.org/675013003
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkLocalMatrixShader.cpp | 4 | ||||
-rwxr-xr-x | src/effects/SkColorFilterImageFilter.cpp | 9 | ||||
-rw-r--r-- | src/effects/SkRectShaderImageFilter.cpp | 12 |
3 files changed, 14 insertions, 11 deletions
diff --git a/src/core/SkLocalMatrixShader.cpp b/src/core/SkLocalMatrixShader.cpp index 62840dd3af..a7d2c15b0c 100644 --- a/src/core/SkLocalMatrixShader.cpp +++ b/src/core/SkLocalMatrixShader.cpp @@ -60,6 +60,10 @@ void SkLocalMatrixShader::toString(SkString* str) const { #endif SkShader* SkShader::CreateLocalMatrixShader(SkShader* proxy, const SkMatrix& localMatrix) { + if (NULL == proxy) { + return NULL; + } + if (localMatrix.isIdentity()) { return SkRef(proxy); } diff --git a/src/effects/SkColorFilterImageFilter.cpp b/src/effects/SkColorFilterImageFilter.cpp index 2a8df5c672..806dd5dd01 100755 --- a/src/effects/SkColorFilterImageFilter.cpp +++ b/src/effects/SkColorFilterImageFilter.cpp @@ -60,6 +60,9 @@ bool matrix_needs_clamping(SkScalar matrix[20]) { SkColorFilterImageFilter* SkColorFilterImageFilter::Create(SkColorFilter* cf, SkImageFilter* input, const CropRect* cropRect, uint32_t uniqueID) { SkASSERT(cf); + if (NULL == cf) { + return NULL; + } SkScalar colorMatrix[20], inputMatrix[20]; SkColorFilter* inputColorFilter; if (input && cf->asColorMatrix(colorMatrix) @@ -78,9 +81,7 @@ SkColorFilterImageFilter* SkColorFilterImageFilter::Create(SkColorFilter* cf, SkColorFilterImageFilter::SkColorFilterImageFilter(SkColorFilter* cf, SkImageFilter* input, const CropRect* cropRect, uint32_t uniqueID) - : INHERITED(1, &input, cropRect, uniqueID), fColorFilter(cf) { - SkASSERT(cf); - SkSafeRef(cf); + : INHERITED(1, &input, cropRect, uniqueID), fColorFilter(SkRef(cf)) { } #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING @@ -102,7 +103,7 @@ void SkColorFilterImageFilter::flatten(SkWriteBuffer& buffer) const { } SkColorFilterImageFilter::~SkColorFilterImageFilter() { - SkSafeUnref(fColorFilter); + fColorFilter->unref(); } bool SkColorFilterImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& source, diff --git a/src/effects/SkRectShaderImageFilter.cpp b/src/effects/SkRectShaderImageFilter.cpp index fb34ed0007..09417c8840 100644 --- a/src/effects/SkRectShaderImageFilter.cpp +++ b/src/effects/SkRectShaderImageFilter.cpp @@ -20,20 +20,18 @@ SkRectShaderImageFilter* SkRectShaderImageFilter::Create(SkShader* s, const SkRe flags = 0x0; } CropRect cropRect(rect, flags); - return SkNEW_ARGS(SkRectShaderImageFilter, (s, &cropRect)); + return s ? SkNEW_ARGS(SkRectShaderImageFilter, (s, &cropRect)) : NULL; } SkRectShaderImageFilter* SkRectShaderImageFilter::Create(SkShader* s, const CropRect* cropRect, uint32_t uniqueID) { SkASSERT(s); - return SkNEW_ARGS(SkRectShaderImageFilter, (s, cropRect, uniqueID)); + return s ? SkNEW_ARGS(SkRectShaderImageFilter, (s, cropRect, uniqueID)) : NULL; } SkRectShaderImageFilter::SkRectShaderImageFilter(SkShader* s, const CropRect* cropRect, uint32_t uniqueID) : INHERITED(0, NULL, cropRect, uniqueID) - , fShader(s) { - SkASSERT(s); - s->ref(); + , fShader(SkRef(s)) { } #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING @@ -55,7 +53,7 @@ void SkRectShaderImageFilter::flatten(SkWriteBuffer& buffer) const { } SkRectShaderImageFilter::~SkRectShaderImageFilter() { - SkSafeUnref(fShader); + fShader->unref(); } bool SkRectShaderImageFilter::onFilterImage(Proxy* proxy, @@ -78,7 +76,7 @@ bool SkRectShaderImageFilter::onFilterImage(Proxy* proxy, SkPaint paint; SkMatrix matrix(ctx.ctm()); matrix.postTranslate(SkIntToScalar(-bounds.left()), SkIntToScalar(-bounds.top())); - paint.setShader(SkShader::CreateLocalMatrixShader(fShader, matrix))->unref(); + SkSafeUnref(paint.setShader(SkShader::CreateLocalMatrixShader(fShader, matrix))); SkRect rect = SkRect::MakeWH(SkIntToScalar(bounds.width()), SkIntToScalar(bounds.height())); canvas.drawRect(rect, paint); |