diff --git a/.gitignore b/.gitignore index 8a8c59c..7d21052 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,4 @@ third_party/ *.idx debug_parser_stub .venv/ +oom-* diff --git a/fuzz/CMakeLists.txt b/fuzz/CMakeLists.txt index fd048b7..70f21d2 100644 --- a/fuzz/CMakeLists.txt +++ b/fuzz/CMakeLists.txt @@ -60,8 +60,17 @@ if(ENABLE_FUZZING) # Fuzz: parser - add_executable(fuzz_parse fuzz_parse.cpp) - target_compile_options(fuzz_parse PRIVATE ${WSHELL_FUZZ_COMPILE_OPTS}) - target_link_options(fuzz_parse PRIVATE ${WSHELL_FUZZ_LINK_OPTS}) + + add_executable(fuzz_parse_line fuzz_parse_line.cpp) + target_include_directories(fuzz_parse_line PRIVATE ${CMAKE_SOURCE_DIR}/include) + target_compile_options(fuzz_parse_line PRIVATE ${WSHELL_FUZZ_COMPILE_OPTS}) + target_link_options(fuzz_parse_line PRIVATE ${WSHELL_FUZZ_LINK_OPTS}) + target_link_libraries(fuzz_parse_line PRIVATE wshell_lib) + + add_executable(fuzz_parse_program fuzz_parse_program.cpp) + target_include_directories(fuzz_parse_program PRIVATE ${CMAKE_SOURCE_DIR}/include) + target_compile_options(fuzz_parse_program PRIVATE ${WSHELL_FUZZ_COMPILE_OPTS}) + target_link_options(fuzz_parse_program PRIVATE ${WSHELL_FUZZ_LINK_OPTS}) + target_link_libraries(fuzz_parse_program PRIVATE wshell_lib) endif() \ No newline at end of file diff --git a/fuzz/fuzz_parse.cpp b/fuzz/fuzz_parse.cpp deleted file mode 100644 index 8db4cf1..0000000 --- a/fuzz/fuzz_parse.cpp +++ /dev/null @@ -1,10 +0,0 @@ - -#include -#include -#include - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { - - return 0; - -} diff --git a/fuzz/fuzz_parse_line.cpp b/fuzz/fuzz_parse_line.cpp new file mode 100644 index 0000000..54c24bb --- /dev/null +++ b/fuzz/fuzz_parse_line.cpp @@ -0,0 +1,16 @@ +#include +#include +#include +#include +#include "shell/parser.hpp" + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + if (size == 0) return 0; + std::string input(reinterpret_cast(data), size); + try { + auto result = wshell::parse_line(input); + } catch (...) { + // Swallow all exceptions + } + return 0; +} diff --git a/fuzz/fuzz_parse_program.cpp b/fuzz/fuzz_parse_program.cpp new file mode 100644 index 0000000..318cec7 --- /dev/null +++ b/fuzz/fuzz_parse_program.cpp @@ -0,0 +1,16 @@ +#include +#include +#include +#include +#include "shell/parser.hpp" + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + if (size == 0) return 0; + std::string input(reinterpret_cast(data), size); + try { + auto result = wshell::parse_program(input); + } catch (...) { + // Swallow all exceptions + } + return 0; +}