aboutsummaryrefslogtreecommitdiffhomepage
path: root/fuzz/FuzzCanvas.cpp
diff options
context:
space:
mode:
authorGravatar Hal Canary <halcanary@google.com>2017-12-01 11:46:26 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-01 17:56:26 +0000
commite292443972861bfeed84e0862c2ae5f7f9e67d69 (patch)
treef3a958c80004a6344e22246af7f5bd873a2ca4cd /fuzz/FuzzCanvas.cpp
parent3cd22cc543ba410f8b46b8b0ca22fb8580040472 (diff)
Fuzz: RasterN32CanvasViaSerialization,
Change-Id: I0ea4f96263aec4b272ead5f541ee304942499f68 Reviewed-on: https://skia-review.googlesource.com/79161 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Hal Canary <halcanary@google.com>
Diffstat (limited to 'fuzz/FuzzCanvas.cpp')
-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);