From 0e0cbc3ab0787c67e1ca81ca6cf6b97e9e378b4d Mon Sep 17 00:00:00 2001 From: Arthur Chan Date: Fri, 26 Jun 2026 03:13:02 +0100 Subject: [PATCH] OSS-Fuzz: Add fuzzer targets compile process (#1767) Signed-off-by: Arthur Chan --- test/fuzzers/fuzz_compile.c | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 test/fuzzers/fuzz_compile.c diff --git a/test/fuzzers/fuzz_compile.c b/test/fuzzers/fuzz_compile.c new file mode 100644 index 00000000..953bb090 --- /dev/null +++ b/test/fuzzers/fuzz_compile.c @@ -0,0 +1,41 @@ +#include +#include + +/* Disable leak sanitizer */ +int __lsan_is_turned_off(void) { + return 1; +} + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + + /* init Janet */ + janet_init(); + + /* fuzz the compiler in src/core/compile.c: parse the untrusted source and + compile each produced form to bytecode */ + JanetTable *env = janet_core_env(NULL); + JanetParser parser; + janet_parser_init(&parser); + + JanetTryState tstate; + if (janet_try(&tstate) == JANET_SIGNAL_OK) { + for (size_t i = 0; i < size; i++) { + if (janet_parser_status(&parser) == JANET_PARSE_ERROR) + break; + janet_parser_consume(&parser, data[i]); + while (janet_parser_has_more(&parser)) { + Janet form = janet_parser_produce(&parser); + JanetCompileResult res = janet_compile(form, env, janet_cstring("fuzz")); + (void) res; + } + } + } + janet_restore(&tstate); + + janet_parser_deinit(&parser); + + /* cleanup Janet */ + janet_deinit(); + + return 0; +}