diff options
Diffstat (limited to 'modules/skjson/src/FuzzSkJSON.cpp')
-rw-r--r-- | modules/skjson/src/FuzzSkJSON.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/modules/skjson/src/FuzzSkJSON.cpp b/modules/skjson/src/FuzzSkJSON.cpp new file mode 100644 index 0000000000..ce33cc1299 --- /dev/null +++ b/modules/skjson/src/FuzzSkJSON.cpp @@ -0,0 +1,32 @@ +/* + * 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 "SkAutoMalloc.h" +#include "SkData.h" +#include "SkJSON.h" +#include "SkStream.h" + +void FuzzSkJSON(sk_sp<SkData> bytes) { + // TODO: add a size + len skjson::DOM factory? + SkAutoMalloc data(bytes->size() + 1); + auto* c_str = static_cast<char*>(data.get()); + + memcpy(c_str, bytes->data(), bytes->size()); + c_str[bytes->size()] = '\0'; + + skjson::DOM dom(c_str); + 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); + FuzzSkJSON(bytes); + return 0; +} +#endif |