| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- # ArduinoJson - https://arduinojson.org
- # Copyright © 2014-2025, Benoit BLANCHON
- # MIT License
- set(CMAKE_CXX_STANDARD 11)
- set(CMAKE_CXX_STANDARD_REQUIRED ON)
- if(MSVC)
- add_compile_options(-D_CRT_SECURE_NO_WARNINGS)
- endif()
- add_executable(msgpack_reproducer
- msgpack_fuzzer.cpp
- reproducer.cpp
- )
- target_link_libraries(msgpack_reproducer
- ArduinoJson
- )
- add_executable(json_reproducer
- json_fuzzer.cpp
- reproducer.cpp
- )
- target_link_libraries(json_reproducer
- ArduinoJson
- )
- macro(add_fuzzer name)
- set(FUZZER "${name}_fuzzer")
- set(CORPUS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}_corpus")
- set(SEED_CORPUS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}_seed_corpus")
- add_executable("${FUZZER}"
- "${name}_fuzzer.cpp"
- )
- target_link_libraries("${FUZZER}"
- ArduinoJson
- )
- set_target_properties("${FUZZER}"
- PROPERTIES
- COMPILE_FLAGS "-fprofile-instr-generate -fcoverage-mapping -fsanitize=fuzzer -fno-sanitize-recover=all"
- LINK_FLAGS "-fprofile-instr-generate -fcoverage-mapping -fsanitize=fuzzer -fno-sanitize-recover=all"
- )
- add_test(
- NAME "${FUZZER}"
- COMMAND "${FUZZER}" "${CORPUS_DIR}" "${SEED_CORPUS_DIR}" -max_total_time=5 -timeout=1
- )
- set_tests_properties("${FUZZER}"
- PROPERTIES
- LABELS "Fuzzing"
- )
- endmacro()
- # Needs Clang 6+ to compile
- if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 6)
- if(DEFINED ENV{GITHUB_ACTIONS} AND CMAKE_CXX_COMPILER_VERSION MATCHES "^11\\.")
- # Clang 11 fails on GitHub Actions with the following error:
- # > ERROR: UndefinedBehaviorSanitizer failed to allocate 0x0 (0) bytes of SetAlternateSignalStack (error code: 22)
- # > Sanitizer CHECK failed: /build/llvm-toolchain-11-mnvtwk/llvm-toolchain-11-11.1.0/compiler-rt/lib/sanitizer_common/sanitizer_common.cpp:54 ((0 && "unable to mmap")) != (0) (0, 0)
- message(WARNING "Fuzzing is disabled on GitHub Actions to workaround a bug in Clang 11")
- return()
- endif()
- add_fuzzer(json)
- add_fuzzer(msgpack)
- endif()
|