From 80452bee11ebe6708ea459ea34e526a44c04bdb0 Mon Sep 17 00:00:00 2001 From: Florin Malita Date: Tue, 19 Jun 2018 11:27:20 -0400 Subject: Fold SkJSON into Skia/utils It's a tiny, core-ish component -- might as well treat as such to simplify dependencies. Change-Id: I6f31ce2d151f9a629d88bfc7f15d64891d5150c0 Reviewed-on: https://skia-review.googlesource.com/135780 Reviewed-by: Mike Klein Reviewed-by: Kevin Lubick Commit-Queue: Florin Malita --- fuzz/fuzz.cpp | 31 +++++++++++-------------------- fuzz/oss_fuzz/FuzzJSON.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 20 deletions(-) create mode 100644 fuzz/oss_fuzz/FuzzJSON.cpp (limited to 'fuzz') diff --git a/fuzz/fuzz.cpp b/fuzz/fuzz.cpp index 96d2a25daa..a71a386820 100644 --- a/fuzz/fuzz.cpp +++ b/fuzz/fuzz.cpp @@ -53,13 +53,11 @@ static constexpr char g_type_message[] = "How to interpret --bytes, one of:\n" "image_decode\n" "image_mode\n" "image_scale\n" + "json\n" "path_deserialize\n" "pipe\n" "region_deserialize\n" "region_set_path\n" -#if defined(SK_ENABLE_SKJSON) - "skjson\n" -#endif "skp\n" "sksl2glsl\n" #if defined(SK_ENABLE_SKOTTIE) @@ -79,6 +77,7 @@ static void fuzz_filter_fuzz(sk_sp); static void fuzz_img2(sk_sp); static void fuzz_animated_img(sk_sp); static void fuzz_img(sk_sp, uint8_t, uint8_t); +static void fuzz_json(sk_sp); static void fuzz_path_deserialize(sk_sp); static void fuzz_region_deserialize(sk_sp); static void fuzz_region_set_path(sk_sp); @@ -92,10 +91,6 @@ static void print_api_names(); static void fuzz_sksl2glsl(sk_sp); #endif -#if defined(SK_ENABLE_SKJSON) -static void fuzz_skjson(sk_sp); -#endif - #if defined(SK_ENABLE_SKOTTIE) static void fuzz_skottie_json(sk_sp); #endif @@ -156,6 +151,10 @@ static int fuzz_file(SkString path, SkString type) { fuzz_color_deserialize(bytes); return 0; } + if (type.equals("filter_fuzz")) { + fuzz_filter_fuzz(bytes); + return 0; + } if (type.equals("image_decode")) { fuzz_img2(bytes); return 0; @@ -170,8 +169,8 @@ static int fuzz_file(SkString path, SkString type) { fuzz_img(bytes, 0, option); return 0; } - if (type.equals("filter_fuzz")) { - fuzz_filter_fuzz(bytes); + if (type.equals("json")) { + fuzz_json(bytes); return 0; } if (type.equals("path_deserialize")) { @@ -190,12 +189,6 @@ static int fuzz_file(SkString path, SkString type) { fuzz_skpipe(bytes); return 0; } -#if defined(SK_ENABLE_SKJSON) - if (type.equals("skjson")) { - fuzz_skjson(bytes); - return 0; - } -#endif #if defined(SK_ENABLE_SKOTTIE) if (type.equals("skottie_json")) { fuzz_skottie_json(bytes); @@ -281,14 +274,12 @@ static SkString try_auto_detect(SkString path, SkString* name) { return SkString(""); } -#if defined(SK_ENABLE_SKJSON) -void FuzzSkJSON(sk_sp bytes); +void FuzzJSON(sk_sp bytes); -static void fuzz_skjson(sk_sp bytes){ - FuzzSkJSON(bytes); +static void fuzz_json(sk_sp bytes){ + FuzzJSON(bytes); SkDebugf("[terminated] Done parsing!\n"); } -#endif #if defined(SK_ENABLE_SKOTTIE) void FuzzSkottieJSON(sk_sp bytes); diff --git a/fuzz/oss_fuzz/FuzzJSON.cpp b/fuzz/oss_fuzz/FuzzJSON.cpp new file mode 100644 index 0000000000..d6d3cf8d34 --- /dev/null +++ b/fuzz/oss_fuzz/FuzzJSON.cpp @@ -0,0 +1,24 @@ +/* + * Copyright 2018 Google, LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkData.h" +#include "SkJSON.h" +#include "SkStream.h" + +void FuzzJSON(sk_sp bytes) { + skjson::DOM dom(static_cast(bytes->data()), bytes->size()); + SkDynamicMemoryWStream wstream; + dom.write(&wstream); +} + +#if defined(IS_FUZZING_WITH_LIBFUZZER) +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + auto bytes = SkData::MakeWithoutCopy(data, size); + FuzzJSON(bytes); + return 0; +} +#endif -- cgit v1.2.3