diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2022-05-09 10:41:36 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2022-05-10 12:58:48 +0200 |
commit | 9ad955ce40e244a52984c68ae2a6b151d918b4a8 (patch) | |
tree | 46f26437eeae3694cee12b515447d93bce304cf9 /src | |
parent | 9674b089cfb1f75653579e83735e049ddcbbed7e (diff) | |
download | systemd-9ad955ce40e244a52984c68ae2a6b151d918b4a8.tar.gz |
fuzz-json: optionally allow logging and output
Similarly to other fuzzers… this makes development easier.
Diffstat (limited to 'src')
-rw-r--r-- | src/fuzz/fuzz-json.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/fuzz/fuzz-json.c b/src/fuzz/fuzz-json.c index ad7460c6fd..648a6d441d 100644 --- a/src/fuzz/fuzz-json.c +++ b/src/fuzz/fuzz-json.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include "alloc-util.h" +#include "env-util.h" #include "fd-util.h" #include "fuzz.h" #include "json.h" @@ -10,18 +11,26 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { size_t out_size; _cleanup_fclose_ FILE *f = NULL, *g = NULL; _cleanup_(json_variant_unrefp) JsonVariant *v = NULL; + int r; + + /* Disable most logging if not running standalone */ + if (!getenv("SYSTEMD_LOG_LEVEL")) + log_set_max_level(LOG_CRIT); f = data_to_file(data, size); assert_se(f); - if (json_parse_file(f, NULL, 0, &v, NULL, NULL) < 0) + r = json_parse_file(f, NULL, 0, &v, NULL, NULL); + if (r < 0) { + log_debug_errno(r, "failed to parse input: %m"); return 0; + } - g = open_memstream_unlocked(&out, &out_size); - assert_se(g); + if (getenv_bool("SYSTEMD_FUZZ_OUTPUT") <= 0) + assert_se(g = open_memstream_unlocked(&out, &out_size)); - json_variant_dump(v, 0, g, NULL); - json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR|JSON_FORMAT_SOURCE, g, NULL); + json_variant_dump(v, 0, g ?: stdout, NULL); + json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR|JSON_FORMAT_SOURCE, g ?: stdout, NULL); return 0; } |