diff options
-rw-r--r-- | include/core/SkPicture.h | 2 | ||||
-rw-r--r-- | src/core/SkPicture.cpp | 10 | ||||
-rw-r--r-- | src/effects/SkPictureImageFilter.cpp | 20 | ||||
-rw-r--r-- | src/shaders/SkPictureShader.cpp | 20 | ||||
-rw-r--r-- | tests/ImageFilterTest.cpp | 58 |
5 files changed, 11 insertions, 99 deletions
diff --git a/include/core/SkPicture.h b/include/core/SkPicture.h index 2139928233..b75e9fceff 100644 --- a/include/core/SkPicture.h +++ b/include/core/SkPicture.h @@ -108,8 +108,6 @@ public: // Returns NULL if this is not an SkBigPicture. virtual const SkBigPicture* asSkBigPicture() const { return nullptr; } - static bool PictureIOSecurityPrecautionsEnabled(); - private: // Subclass whitelist. SkPicture(); diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp index 1c8d0f9b49..a8cb0d7c40 100644 --- a/src/core/SkPicture.cpp +++ b/src/core/SkPicture.cpp @@ -16,12 +16,6 @@ #include "SkPictureRecorder.h" #include "SkSerialProcs.h" -#if defined(SK_DISALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS) -static bool g_AllPictureIOSecurityPrecautionsEnabled = true; -#else -static bool g_AllPictureIOSecurityPrecautionsEnabled = false; -#endif - // When we read/write the SkPictInfo via a stream, we have a sentinel byte right after the info. // Note: in the read/write buffer versions, we have a slightly different convention: // We have a sentinel int32_t: @@ -322,7 +316,3 @@ void SkPicture::flatten(SkWriteBuffer& buffer) const { } } -// Global setting to disable security precautions for serialization. -bool SkPicture::PictureIOSecurityPrecautionsEnabled() { - return g_AllPictureIOSecurityPrecautionsEnabled; -} diff --git a/src/effects/SkPictureImageFilter.cpp b/src/effects/SkPictureImageFilter.cpp index 2596f41426..304b91cf3c 100644 --- a/src/effects/SkPictureImageFilter.cpp +++ b/src/effects/SkPictureImageFilter.cpp @@ -56,12 +56,8 @@ sk_sp<SkFlattenable> SkPictureImageFilter::CreateProc(SkReadBuffer& buffer) { sk_sp<SkPicture> picture; SkRect cropRect; - if (SkPicture::PictureIOSecurityPrecautionsEnabled()) { - buffer.validate(!buffer.readBool()); - } else { - if (buffer.readBool()) { - picture = SkPicture::MakeFromBuffer(buffer); - } + if (buffer.readBool()) { + picture = SkPicture::MakeFromBuffer(buffer); } buffer.readRect(&cropRect); @@ -77,14 +73,10 @@ sk_sp<SkFlattenable> SkPictureImageFilter::CreateProc(SkReadBuffer& buffer) { } void SkPictureImageFilter::flatten(SkWriteBuffer& buffer) const { - if (SkPicture::PictureIOSecurityPrecautionsEnabled()) { - buffer.writeBool(false); - } else { - bool hasPicture = (fPicture != nullptr); - buffer.writeBool(hasPicture); - if (hasPicture) { - fPicture->flatten(buffer); - } + bool hasPicture = (fPicture != nullptr); + buffer.writeBool(hasPicture); + if (hasPicture) { + fPicture->flatten(buffer); } buffer.writeRect(fCropRect); } diff --git a/src/shaders/SkPictureShader.cpp b/src/shaders/SkPictureShader.cpp index 40724357e7..c536350cf9 100644 --- a/src/shaders/SkPictureShader.cpp +++ b/src/shaders/SkPictureShader.cpp @@ -162,13 +162,9 @@ sk_sp<SkFlattenable> SkPictureShader::CreateProc(SkReadBuffer& buffer) { sk_sp<SkPicture> picture; - if (SkPicture::PictureIOSecurityPrecautionsEnabled()) { - buffer.validate(!buffer.readBool()); - } else { - bool didSerialize = buffer.readBool(); - if (didSerialize) { - picture = SkPicture::MakeFromBuffer(buffer); - } + bool didSerialize = buffer.readBool(); + if (didSerialize) { + picture = SkPicture::MakeFromBuffer(buffer); } return SkPictureShader::Make(picture, mx, my, &lm, &tile); } @@ -179,14 +175,8 @@ void SkPictureShader::flatten(SkWriteBuffer& buffer) const { buffer.write32(fTmy); buffer.writeRect(fTile); - // The deserialization code won't trust that our serialized picture is safe to deserialize. - // So write a 'false' telling it that we're not serializing a picture. - if (SkPicture::PictureIOSecurityPrecautionsEnabled()) { - buffer.writeBool(false); - } else { - buffer.writeBool(true); - fPicture->flatten(buffer); - } + buffer.writeBool(true); + fPicture->flatten(buffer); } sk_sp<SkShader> SkPictureShader::refBitmapShader(const SkMatrix& viewMatrix, const SkMatrix* localM, diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp index bcc0bfe1f5..e17a94f68f 100644 --- a/tests/ImageFilterTest.cpp +++ b/tests/ImageFilterTest.cpp @@ -1212,64 +1212,6 @@ DEF_TEST(ImageFilterMatrix, reporter) { canvas.drawPicture(recorder.finishRecordingAsPicture()); } -DEF_TEST(ImageFilterCrossProcessPictureImageFilter, reporter) { - SkRTreeFactory factory; - SkPictureRecorder recorder; - SkCanvas* recordingCanvas = recorder.beginRecording(1, 1, &factory, 0); - - // Create an SkPicture which simply draws a green 1x1 rectangle. - SkPaint greenPaint; - greenPaint.setColor(SK_ColorGREEN); - recordingCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), greenPaint); - sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture()); - - // Wrap that SkPicture in an SkPictureImageFilter. - sk_sp<SkImageFilter> imageFilter(SkPictureImageFilter::Make(picture)); - - // Check that SkPictureImageFilter successfully serializes its contained - // SkPicture when not in cross-process mode. - SkPaint paint; - paint.setImageFilter(imageFilter); - SkPictureRecorder outerRecorder; - SkCanvas* outerCanvas = outerRecorder.beginRecording(1, 1, &factory, 0); - SkPaint redPaintWithFilter; - redPaintWithFilter.setColor(SK_ColorRED); - redPaintWithFilter.setImageFilter(imageFilter); - outerCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), redPaintWithFilter); - sk_sp<SkPicture> outerPicture(outerRecorder.finishRecordingAsPicture()); - - SkBitmap bitmap; - bitmap.allocN32Pixels(1, 1); - SkCanvas canvas(bitmap); - - // The result here should be green, since the filter replaces the primitive's red interior. - canvas.clear(0x0); - canvas.drawPicture(outerPicture); - uint32_t pixel = *bitmap.getAddr32(0, 0); - REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); - - // Check that, for now, SkPictureImageFilter does not serialize or - // deserialize its contained picture when the filter is serialized - // cross-process. Do this by "laundering" it through SkReadBuffer. - sk_sp<SkData> data(SkValidatingSerializeFlattenable(imageFilter.get())); - sk_sp<SkImageFilter> unflattenedFilter = SkValidatingDeserializeImageFilter(data->data(), - data->size()); - - redPaintWithFilter.setImageFilter(unflattenedFilter); - SkPictureRecorder crossProcessRecorder; - SkCanvas* crossProcessCanvas = crossProcessRecorder.beginRecording(1, 1, &factory, 0); - crossProcessCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), redPaintWithFilter); - sk_sp<SkPicture> crossProcessPicture(crossProcessRecorder.finishRecordingAsPicture()); - - canvas.clear(0x0); - canvas.drawPicture(crossProcessPicture); - pixel = *bitmap.getAddr32(0, 0); - // If the security precautions are enabled, the result here should not be green, since the - // filter draws nothing. - REPORTER_ASSERT(reporter, SkPicture::PictureIOSecurityPrecautionsEnabled() - ? pixel != SK_ColorGREEN : pixel == SK_ColorGREEN); -} - static void test_clipped_picture_imagefilter(skiatest::Reporter* reporter, GrContext* context) { sk_sp<SkPicture> picture; |