aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/core/SkPicture.h2
-rw-r--r--src/core/SkPicture.cpp10
-rw-r--r--src/effects/SkPictureImageFilter.cpp20
-rw-r--r--src/shaders/SkPictureShader.cpp20
-rw-r--r--tests/ImageFilterTest.cpp58
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;