aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar sugoi <sugoi@chromium.org>2014-10-30 14:05:14 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-10-30 14:05:15 -0700
commit9bde31e95ddd82a4a923275bb01265740407dab1 (patch)
tree217a431fce925cb4ad2d50167bf502ce6f52144e /src
parente228ba3e5cab59034875ea6599527aab30f04623 (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.cpp4
-rwxr-xr-xsrc/effects/SkColorFilterImageFilter.cpp9
-rw-r--r--src/effects/SkRectShaderImageFilter.cpp12
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);