Bug 1329296 - don't use ExtractSubset on null SkImage when accessing surface pattern fails. r=mchang
MozReview-Commit-ID: I9K07esTA0W
--- a/gfx/2d/DrawTargetSkia.cpp
+++ b/gfx/2d/DrawTargetSkia.cpp
@@ -468,34 +468,34 @@ SetPaintPattern(SkPaint& aPaint, const P
mode, 0, &mat);
aPaint.setShader(shader);
}
break;
}
case PatternType::SURFACE: {
const SurfacePattern& pat = static_cast<const SurfacePattern&>(aPattern);
sk_sp<SkImage> image = GetSkImageForSurface(pat.mSurface);
+ if (!image) {
+ aPaint.setColor(SK_ColorTRANSPARENT);
+ break;
+ }
SkMatrix mat;
GfxMatrixToSkiaMatrix(pat.mMatrix, mat);
mat.postTranslate(SkFloatToScalar(aOffset.x), SkFloatToScalar(aOffset.y));
if (!pat.mSamplingRect.IsEmpty()) {
image = ExtractSubset(image, pat.mSamplingRect);
mat.preTranslate(pat.mSamplingRect.x, pat.mSamplingRect.y);
}
SkShader::TileMode xTileMode = ExtendModeToTileMode(pat.mExtendMode, Axis::X_AXIS);
SkShader::TileMode yTileMode = ExtendModeToTileMode(pat.mExtendMode, Axis::Y_AXIS);
- if (image) {
- aPaint.setShader(image->makeShader(xTileMode, yTileMode, &mat));
- } else {
- aPaint.setColor(SK_ColorTRANSPARENT);
- }
+ aPaint.setShader(image->makeShader(xTileMode, yTileMode, &mat));
if (pat.mSamplingFilter == SamplingFilter::POINT) {
aPaint.setFilterQuality(kNone_SkFilterQuality);
}
break;
}
}
}