aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--fuzz/FuzzCanvas.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/fuzz/FuzzCanvas.cpp b/fuzz/FuzzCanvas.cpp
index 064d38aa72..a3737dc332 100644
--- a/fuzz/FuzzCanvas.cpp
+++ b/fuzz/FuzzCanvas.cpp
@@ -60,6 +60,7 @@
// SRC
#include "SkUtils.h"
+#include "SkValidatingReadBuffer.h"
#if SK_SUPPORT_GPU
#include "GrContextFactory.h"
@@ -1762,6 +1763,22 @@ DEF_FUZZ(RasterN32Canvas, fuzz) {
fuzz_canvas(fuzz, surface->getCanvas());
}
+DEF_FUZZ(RasterN32CanvasViaSerialization, fuzz) {
+ SkPictureRecorder recorder;
+ fuzz_canvas(fuzz, recorder.beginRecording(SkIntToScalar(kCanvasSize.width()),
+ SkIntToScalar(kCanvasSize.height())));
+ sk_sp<SkPicture> pic(recorder.finishRecordingAsPicture());
+ if (!pic) { fuzz->signalBug(); }
+ sk_sp<SkData> data = pic->serialize();
+ if (!data) { fuzz->signalBug(); }
+ SkValidatingReadBuffer vrb(data->data(), data->size());
+ auto deserialized = SkPicture::MakeFromBuffer(vrb);
+ if (!deserialized) { fuzz->signalBug(); }
+ auto surface = SkSurface::MakeRasterN32Premul(kCanvasSize.width(), kCanvasSize.height());
+ SkASSERT(surface && surface->getCanvas());
+ surface->getCanvas()->drawPicture(deserialized);
+}
+
#if SK_SUPPORT_GPU
static void fuzz_ganesh(Fuzz* fuzz, GrContext* context) {
SkASSERT(context);