aboutsummaryrefslogtreecommitdiffhomepage
path: root/fuzz/fuzz.cpp
diff options
context:
space:
mode:
authorGravatar Kevin Lubick <kjlubick@google.com>2018-01-03 14:38:48 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-01-03 19:58:00 +0000
commit0d825666f79f4d9baea489b21506da3163f73aa9 (patch)
treeb1a9ad8d64c4a09c075be10788a9d27a09a8daaf /fuzz/fuzz.cpp
parentda6d0720300a29a4deb5dd4c433a92a3ec41286e (diff)
Add SkPipe fuzzer
Bug: skia: Change-Id: I6e87758f2e5bff18e885834baaaa4a5add564cb1 Reviewed-on: https://skia-review.googlesource.com/90543 Commit-Queue: Kevin Lubick <kjlubick@google.com> Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'fuzz/fuzz.cpp')
-rw-r--r--fuzz/fuzz.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/fuzz/fuzz.cpp b/fuzz/fuzz.cpp
index 7852dd3546..75f87c14e3 100644
--- a/fuzz/fuzz.cpp
+++ b/fuzz/fuzz.cpp
@@ -20,6 +20,7 @@
#include "SkPaint.h"
#include "SkPath.h"
#include "SkPicture.h"
+#include "SkPipe.h"
#include "SkReadBuffer.h"
#include "SkRegion.h"
#include "SkStream.h"
@@ -61,6 +62,7 @@ static void fuzz_img(sk_sp<SkData>, uint8_t, uint8_t);
static void fuzz_path_deserialize(sk_sp<SkData>);
static void fuzz_region_deserialize(sk_sp<SkData>);
static void fuzz_skp(sk_sp<SkData>);
+static void fuzz_skpipe(sk_sp<SkData>);
static void fuzz_textblob_deserialize(sk_sp<SkData>);
#if SK_SUPPORT_GPU
@@ -126,6 +128,10 @@ static int fuzz_file(const char* path) {
fuzz_region_deserialize(bytes);
return 0;
}
+ if (0 == strcmp("pipe", FLAGS_type[0])) {
+ fuzz_skpipe(bytes);
+ return 0;
+ }
if (0 == strcmp("skp", FLAGS_type[0])) {
fuzz_skp(bytes);
return 0;
@@ -459,6 +465,21 @@ static void fuzz_skp(sk_sp<SkData> bytes) {
dump_png(bitmap);
}
+static void fuzz_skpipe(sk_sp<SkData> bytes) {
+ SkPipeDeserializer d;
+ SkDebugf("Decoding\n");
+ sk_sp<SkPicture> pic(d.readPicture(bytes.get()));
+ if (!pic) {
+ SkDebugf("[terminated] Couldn't decode picture via SkPipe.\n");
+ return;
+ }
+ SkDebugf("Rendering\n");
+ SkBitmap bitmap;
+ SkCanvas canvas(bitmap);
+ canvas.drawPicture(pic);
+ SkDebugf("[terminated] Success! Decoded and rendered an SkPicture from SkPipe!\n");
+}
+
static void fuzz_icc(sk_sp<SkData> bytes) {
sk_sp<SkColorSpace> space(SkColorSpace::MakeICC(bytes->data(), bytes->size()));
if (!space) {