2018-10-19 19:42:15 +02:00
|
|
|
# ArduinoJson - arduinojson.org
|
2021-01-25 09:14:15 +01:00
|
|
|
# Copyright Benoit Blanchon 2014-2021
|
2018-10-19 19:42:15 +02:00
|
|
|
# MIT License
|
|
|
|
|
2018-11-30 14:26:15 +01:00
|
|
|
if(MSVC)
|
|
|
|
add_compile_options(-D_CRT_SECURE_NO_WARNINGS)
|
|
|
|
endif()
|
|
|
|
|
2020-07-15 11:05:36 +02:00
|
|
|
add_executable(msgpack_reproducer
|
2018-10-19 19:42:15 +02:00
|
|
|
msgpack_fuzzer.cpp
|
2020-07-15 11:05:36 +02:00
|
|
|
reproducer.cpp
|
2018-10-19 19:42:15 +02:00
|
|
|
)
|
2020-07-15 11:05:36 +02:00
|
|
|
target_link_libraries(msgpack_reproducer
|
2020-04-07 21:43:10 +02:00
|
|
|
ArduinoJson
|
|
|
|
)
|
2018-11-12 18:28:34 +01:00
|
|
|
|
2020-07-15 11:05:36 +02:00
|
|
|
add_executable(json_reproducer
|
2018-11-12 18:28:34 +01:00
|
|
|
json_fuzzer.cpp
|
2020-07-15 11:05:36 +02:00
|
|
|
reproducer.cpp
|
2018-11-12 18:28:34 +01:00
|
|
|
)
|
2020-07-15 11:05:36 +02:00
|
|
|
target_link_libraries(json_reproducer
|
2020-04-07 21:43:10 +02:00
|
|
|
ArduinoJson
|
|
|
|
)
|
2020-07-15 11:05:36 +02:00
|
|
|
|
2020-08-03 09:24:30 +02:00
|
|
|
# Infer path of llvm-symbolizer from the path of clang
|
|
|
|
string(REPLACE "clang++" "llvm-symbolizer" LLVM_SYMBOLIZER ${CMAKE_CXX_COMPILER})
|
|
|
|
|
|
|
|
macro(add_fuzzer name mode)
|
|
|
|
set(FUZZER "${name}_${mode}_fuzzer")
|
2020-07-15 11:05:36 +02:00
|
|
|
set(CORPUS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}_corpus")
|
|
|
|
set(SEED_CORPUS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}_seed_corpus")
|
|
|
|
add_executable("${FUZZER}"
|
2020-08-03 09:24:30 +02:00
|
|
|
"${name}_fuzzer.cpp"
|
2020-07-15 11:05:36 +02:00
|
|
|
)
|
|
|
|
target_link_libraries("${FUZZER}"
|
|
|
|
ArduinoJson
|
|
|
|
)
|
|
|
|
set_target_properties("${FUZZER}"
|
|
|
|
PROPERTIES
|
2020-08-03 09:24:30 +02:00
|
|
|
COMPILE_FLAGS
|
|
|
|
"-fprofile-instr-generate -fcoverage-mapping -fsanitize=${mode},fuzzer -fno-sanitize-recover=all"
|
2020-07-15 11:05:36 +02:00
|
|
|
LINK_FLAGS
|
2020-08-03 09:24:30 +02:00
|
|
|
"-fprofile-instr-generate -fcoverage-mapping -fsanitize=${mode},fuzzer -fno-sanitize-recover=all"
|
2020-07-15 11:05:36 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
add_test(
|
|
|
|
NAME
|
|
|
|
"${FUZZER}"
|
|
|
|
COMMAND
|
|
|
|
"${FUZZER}" "${CORPUS_DIR}" "${SEED_CORPUS_DIR}" -max_total_time=5 -timeout=1
|
|
|
|
)
|
2020-08-03 09:24:30 +02:00
|
|
|
|
|
|
|
set_tests_properties("${FUZZER}"
|
|
|
|
PROPERTIES
|
|
|
|
ENVIRONMENT
|
|
|
|
ASAN_SYMBOLIZER_PATH=${LLVM_SYMBOLIZER}
|
|
|
|
ENVIRONMENT
|
|
|
|
LLVM_SYMBOLIZER_PATH=${LLVM_SYMBOLIZER}
|
|
|
|
ENVIRONMENT
|
|
|
|
MSAN_SYMBOLIZER_PATH=${LLVM_SYMBOLIZER}
|
|
|
|
ENVIRONMENT
|
|
|
|
UBSAN_SYMBOLIZER_PATH=${LLVM_SYMBOLIZER}
|
|
|
|
)
|
2020-07-15 11:05:36 +02:00
|
|
|
endmacro()
|
|
|
|
|
2020-08-03 09:24:30 +02:00
|
|
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6)
|
|
|
|
add_fuzzer(json address)
|
|
|
|
add_fuzzer(json undefined)
|
|
|
|
add_fuzzer(msgpack address)
|
|
|
|
add_fuzzer(msgpack undefined)
|
2020-07-15 11:05:36 +02:00
|
|
|
endif()
|
2020-09-05 11:10:13 +02:00
|
|
|
|
|
|
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7)
|
|
|
|
# We're getting false positive with Clang 6
|
|
|
|
add_fuzzer(json memory)
|
|
|
|
add_fuzzer(msgpack memory)
|
|
|
|
endif()
|