Added memory sanitizer to fuzzers

This commit is contained in:
Benoit Blanchon
2020-08-03 09:24:30 +02:00
parent 1f8636d762
commit 74e7dd053f
3 changed files with 29 additions and 24 deletions

View File

@ -128,20 +128,6 @@ matrix:
- env: SCRIPT=arduino VERSION=1.8.2 BOARD=arduino:samd:mkr1000 - env: SCRIPT=arduino VERSION=1.8.2 BOARD=arduino:samd:mkr1000
- env: SCRIPT=platformio BOARD=uno - env: SCRIPT=platformio BOARD=uno
- env: SCRIPT=platformio BOARD=esp01 - env: SCRIPT=platformio BOARD=esp01
- addons:
apt:
sources:
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main'
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
packages: ['clang-9','llvm-9']
env: SCRIPT=fuzz CLANG=9 FUZZER=json
- addons:
apt:
sources:
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main'
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
packages: ['clang-9','llvm-9']
env: SCRIPT=fuzz CLANG=9 FUZZER=msgpack
cache: cache:
directories: directories:
- "~/.platformio" - "~/.platformio"

View File

@ -2,7 +2,7 @@
# Copyright Benoit Blanchon 2014-2020 # Copyright Benoit Blanchon 2014-2020
# MIT License # MIT License
cmake_minimum_required(VERSION 3.7) cmake_minimum_required(VERSION 3.0)
project(ArduinoJson VERSION 6.16.0) project(ArduinoJson VERSION 6.16.0)

View File

@ -22,22 +22,25 @@ target_link_libraries(json_reproducer
ArduinoJson ArduinoJson
) )
macro(add_fuzzer name) # Infer path of llvm-symbolizer from the path of clang
set(FUZZER "${name}_fuzzer") string(REPLACE "clang++" "llvm-symbolizer" LLVM_SYMBOLIZER ${CMAKE_CXX_COMPILER})
macro(add_fuzzer name mode)
set(FUZZER "${name}_${mode}_fuzzer")
set(CORPUS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}_corpus") set(CORPUS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}_corpus")
set(SEED_CORPUS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}_seed_corpus") set(SEED_CORPUS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}_seed_corpus")
add_executable("${FUZZER}" add_executable("${FUZZER}"
"${FUZZER}.cpp" "${name}_fuzzer.cpp"
) )
target_link_libraries("${FUZZER}" target_link_libraries("${FUZZER}"
ArduinoJson ArduinoJson
) )
set_target_properties("${FUZZER}" set_target_properties("${FUZZER}"
PROPERTIES PROPERTIES
COMPILE_FLAGS COMPILE_FLAGS
"-fprofile-instr-generate -fcoverage-mapping -fsanitize=address,undefined,fuzzer -fno-sanitize-recover=all" "-fprofile-instr-generate -fcoverage-mapping -fsanitize=${mode},fuzzer -fno-sanitize-recover=all"
LINK_FLAGS LINK_FLAGS
"-fprofile-instr-generate -fcoverage-mapping -fsanitize=address,undefined,fuzzer -fno-sanitize-recover=all" "-fprofile-instr-generate -fcoverage-mapping -fsanitize=${mode},fuzzer -fno-sanitize-recover=all"
) )
add_test( add_test(
@ -46,9 +49,25 @@ macro(add_fuzzer name)
COMMAND COMMAND
"${FUZZER}" "${CORPUS_DIR}" "${SEED_CORPUS_DIR}" -max_total_time=5 -timeout=1 "${FUZZER}" "${CORPUS_DIR}" "${SEED_CORPUS_DIR}" -max_total_time=5 -timeout=1
) )
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}
)
endmacro() endmacro()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 6) if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6)
add_fuzzer(json) add_fuzzer(json address)
add_fuzzer(msgpack) add_fuzzer(json memory)
add_fuzzer(json undefined)
add_fuzzer(msgpack address)
add_fuzzer(msgpack memory)
add_fuzzer(msgpack undefined)
endif() endif()