diff options
author | Hal Canary <halcanary@google.com> | 2017-12-01 11:46:26 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-12-01 17:56:26 +0000 |
commit | e292443972861bfeed84e0862c2ae5f7f9e67d69 (patch) | |
tree | f3a958c80004a6344e22246af7f5bd873a2ca4cd /fuzz/FuzzCanvas.cpp | |
parent | 3cd22cc543ba410f8b46b8b0ca22fb8580040472 (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.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); |