From ff8ac601849e61194b663fb73ca971a12fe7cab0 Mon Sep 17 00:00:00 2001 From: DavidKorczynski Date: Fri, 27 Nov 2020 22:57:02 +0000 Subject: [PATCH] Lagom: Various fixes to make Lagom run on OSS-Fuzz (#4176) --- AK/Random.h | 3 + Meta/Lagom/CMakeLists.txt | 109 ++++++++++++++++-------------- Meta/Lagom/Fuzzers/CMakeLists.txt | 12 +++- 3 files changed, 72 insertions(+), 52 deletions(-) diff --git a/AK/Random.h b/AK/Random.h index eff727ec883..ec5a7aadecb 100644 --- a/AK/Random.h +++ b/AK/Random.h @@ -47,6 +47,9 @@ inline void fill_with_random(void* buffer, size_t length) { #if defined(__serenity__) arc4random_buf(buffer, length); +#elif defined(OSS_FUZZ) + (void)buffer; + (void)length; #elif defined(__unix__) or defined(__APPLE__) int rc = getentropy(buffer, length); (void)rc; diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt index d2c733212a0..a5a287177ba 100644 --- a/Meta/Lagom/CMakeLists.txt +++ b/Meta/Lagom/CMakeLists.txt @@ -1,7 +1,12 @@ cmake_minimum_required (VERSION 3.0) project (Lagom) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option -O2 -Wall -Wextra -Werror -std=c++2a -fPIC -g -Wno-deprecated-copy") +if (NOT ENABLE_OSS_FUZZ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option -O2 -Wall -Wextra -Werror -std=c++2a -fPIC -g -Wno-deprecated-copy") +else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++2a -fPIC -g -Wno-deprecated-copy") +endif() + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wconsumed -Wno-overloaded-virtual") @@ -68,67 +73,71 @@ include_directories (../../) include_directories (../../Libraries/) add_library(LagomCore ${LAGOM_CORE_SOURCES}) + + if (BUILD_LAGOM) add_library(Lagom $ ${LAGOM_MORE_SOURCES}) + + if (NOT ENABLE_OSS_FUZZ) + add_executable(TestApp TestApp.cpp) + target_link_libraries(TestApp Lagom) + target_link_libraries(TestApp stdc++) - add_executable(TestApp TestApp.cpp) - target_link_libraries(TestApp Lagom) - target_link_libraries(TestApp stdc++) + add_executable(TestJson TestJson.cpp) + target_link_libraries(TestJson Lagom) + target_link_libraries(TestJson stdc++) - add_executable(TestJson TestJson.cpp) - target_link_libraries(TestJson Lagom) - target_link_libraries(TestJson stdc++) + add_executable(adjtime_lagom ../../Userland/adjtime.cpp) + set_target_properties(adjtime_lagom PROPERTIES OUTPUT_NAME adjtime) + target_link_libraries(adjtime_lagom Lagom) - add_executable(adjtime_lagom ../../Userland/adjtime.cpp) - set_target_properties(adjtime_lagom PROPERTIES OUTPUT_NAME adjtime) - target_link_libraries(adjtime_lagom Lagom) + add_executable(js_lagom ../../Userland/js.cpp) + set_target_properties(js_lagom PROPERTIES OUTPUT_NAME js) + target_link_libraries(js_lagom Lagom) + target_link_libraries(js_lagom stdc++) + target_link_libraries(js_lagom pthread) - add_executable(js_lagom ../../Userland/js.cpp) - set_target_properties(js_lagom PROPERTIES OUTPUT_NAME js) - target_link_libraries(js_lagom Lagom) - target_link_libraries(js_lagom stdc++) - target_link_libraries(js_lagom pthread) + add_executable(ntpquery_lagom ../../Userland/ntpquery.cpp) + set_target_properties(ntpquery_lagom PROPERTIES OUTPUT_NAME ntpquery) + target_link_libraries(ntpquery_lagom Lagom) - add_executable(ntpquery_lagom ../../Userland/ntpquery.cpp) - set_target_properties(ntpquery_lagom PROPERTIES OUTPUT_NAME ntpquery) - target_link_libraries(ntpquery_lagom Lagom) + add_executable(test-js_lagom ../../Userland/test-js.cpp) + set_target_properties(test-js_lagom PROPERTIES OUTPUT_NAME test-js) + target_link_libraries(test-js_lagom Lagom) + target_link_libraries(test-js_lagom stdc++) + target_link_libraries(test-js_lagom pthread) - add_executable(test-js_lagom ../../Userland/test-js.cpp) - set_target_properties(test-js_lagom PROPERTIES OUTPUT_NAME test-js) - target_link_libraries(test-js_lagom Lagom) - target_link_libraries(test-js_lagom stdc++) - target_link_libraries(test-js_lagom pthread) - - add_executable(test-crypto_lagom ../../Userland/test-crypto.cpp) - set_target_properties(test-crypto_lagom PROPERTIES OUTPUT_NAME test-crypto) - target_link_libraries(test-crypto_lagom Lagom) - target_link_libraries(test-crypto_lagom stdc++) - add_test( - NAME Crypto - COMMAND test-crypto_lagom test -t -s google.com --ca-certs-file ../../Base/etc/ca_certs.ini - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - ) - - add_executable(disasm_lagom ../../Userland/disasm.cpp) - set_target_properties(disasm_lagom PROPERTIES OUTPUT_NAME disasm) - target_link_libraries(disasm_lagom Lagom) - target_link_libraries(disasm_lagom stdc++) - - add_executable(shell_lagom ${SHELL_SOURCES}) - set_target_properties(shell_lagom PROPERTIES OUTPUT_NAME shell) - target_link_libraries(shell_lagom Lagom) - target_link_libraries(shell_lagom stdc++) - target_link_libraries(shell_lagom pthread) - foreach(TEST_PATH ${SHELL_TESTS}) - get_filename_component(TEST_NAME ${TEST_PATH} NAME_WE) + add_executable(test-crypto_lagom ../../Userland/test-crypto.cpp) + set_target_properties(test-crypto_lagom PROPERTIES OUTPUT_NAME test-crypto) + target_link_libraries(test-crypto_lagom Lagom) + target_link_libraries(test-crypto_lagom stdc++) add_test( - NAME "Shell-${TEST_NAME}" - COMMAND shell_lagom "${TEST_PATH}" + NAME Crypto + COMMAND test-crypto_lagom test -t -s google.com --ca-certs-file ../../Base/etc/ca_certs.ini WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) - endforeach() + + add_executable(disasm_lagom ../../Userland/disasm.cpp) + set_target_properties(disasm_lagom PROPERTIES OUTPUT_NAME disasm) + target_link_libraries(disasm_lagom Lagom) + target_link_libraries(disasm_lagom stdc++) + + add_executable(shell_lagom ${SHELL_SOURCES}) + set_target_properties(shell_lagom PROPERTIES OUTPUT_NAME shell) + target_link_libraries(shell_lagom Lagom) + target_link_libraries(shell_lagom stdc++) + target_link_libraries(shell_lagom pthread) + foreach(TEST_PATH ${SHELL_TESTS}) + get_filename_component(TEST_NAME ${TEST_PATH} NAME_WE) + add_test( + NAME "Shell-${TEST_NAME}" + COMMAND shell_lagom "${TEST_PATH}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) + endforeach() + endif() endif() -if (ENABLE_FUZZER_SANITIZER) +if (ENABLE_FUZZER_SANITIZER OR ENABLE_OSS_FUZZ) add_subdirectory(Fuzzers) endif() diff --git a/Meta/Lagom/Fuzzers/CMakeLists.txt b/Meta/Lagom/Fuzzers/CMakeLists.txt index 9b1256b46a4..902b9f5e0d1 100644 --- a/Meta/Lagom/Fuzzers/CMakeLists.txt +++ b/Meta/Lagom/Fuzzers/CMakeLists.txt @@ -1,12 +1,18 @@ function(add_simple_fuzzer name) add_executable(${name} "${name}.cpp") - target_compile_options(${name} + + if (ENABLE_OSS_FUZZ) + target_link_libraries(${name} + PUBLIC Lagom) + else() + target_compile_options(${name} PRIVATE $<$:-g -O1 -fsanitize=fuzzer> ) - target_link_libraries(${name} + target_link_libraries(${name} PUBLIC Lagom PRIVATE $<$:-fsanitize=fuzzer> ) + endif() endfunction() add_simple_fuzzer(FuzzBMPLoader) @@ -22,6 +28,7 @@ add_simple_fuzzer(FuzzPPMLoader) add_simple_fuzzer(FuzzJs) add_simple_fuzzer(FuzzMarkdown) +if (NOT ENABLE_OSS_FUZZ) add_executable(FuzzilliJs FuzzilliJs.cpp) target_compile_options(FuzzilliJs PRIVATE $<$:-g -O1 -fsanitize-coverage=trace-pc-guard> @@ -30,3 +37,4 @@ target_link_libraries(FuzzilliJs PUBLIC Lagom PRIVATE $<$:-fsanitize-coverage=trace-pc-guard> ) +endif()