Index: CMakeLists.txt =================================================================== --- CMakeLists.txt +++ CMakeLists.txt @@ -432,4 +432,5 @@ "available!") else() add_subdirectory(test) + add_subdirectory(fuzz) endif() Index: fuzz/CMakeLists.txt =================================================================== --- /dev/null +++ fuzz/CMakeLists.txt @@ -0,0 +1,13 @@ +# See http://llvm.org/docs/LibFuzzer.html +if( LLVM_USE_SANITIZE_COVERAGE ) + set(LLVM_LINK_COMPONENTS support) + + add_executable(cxa_demangle_fuzzer + cxa_demangle_fuzzer.cpp + ../src/cxa_demangle.cpp + ) + + target_link_libraries(cxa_demangle_fuzzer + LLVMFuzzer + ) +endif() Index: fuzz/cxa_demangle_fuzzer.cpp =================================================================== --- /dev/null +++ fuzz/cxa_demangle_fuzzer.cpp @@ -0,0 +1,15 @@ +#include +#include +#include +#include +extern "C" char * +__cxa_demangle(const char *mangled_name, char *buf, size_t *n, int *status); + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + char *str = new char[size+1]; + memcpy(str, data, size); + str[size] = 0; + free(__cxa_demangle(str, 0, 0, 0)); + delete [] str; + return 0; +}