diff options
author | Florin Malita <fmalita@chromium.org> | 2018-06-08 12:25:38 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-06-08 17:45:33 +0000 |
commit | 7796f00dcfd09ca52140c4133ddc9bc197b832db (patch) | |
tree | ea438f8ab65f69a8d5e1b93c1d759d347a928959 /modules/skjson/src/FuzzSkJSON.cpp | |
parent | 61e66867ae10451fd365a676747a2c853bdd723d (diff) |
SkJson
For now this is only wired to a bench and a couple of tests.
Local numbers, for a ~500KB BM "compressed" json:
micros bench
2456.54 json_rapidjson nonrendering
1192.38 json_skjson nonrendering
Change-Id: I7b3514f84c7c525d1787722c43ad6095e3692563
Reviewed-on: https://skia-review.googlesource.com/127622
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
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 |