diff options
Diffstat (limited to 'fuzz/FuzzCanvas.cpp')
-rw-r--r-- | fuzz/FuzzCanvas.cpp | 17 |
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); |