From e292443972861bfeed84e0862c2ae5f7f9e67d69 Mon Sep 17 00:00:00 2001 From: Hal Canary Date: Fri, 1 Dec 2017 11:46:26 -0500 Subject: Fuzz: RasterN32CanvasViaSerialization, Change-Id: I0ea4f96263aec4b272ead5f541ee304942499f68 Reviewed-on: https://skia-review.googlesource.com/79161 Reviewed-by: Mike Klein Commit-Queue: Hal Canary --- fuzz/FuzzCanvas.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'fuzz/FuzzCanvas.cpp') 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 pic(recorder.finishRecordingAsPicture()); + if (!pic) { fuzz->signalBug(); } + sk_sp 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); -- cgit v1.2.3