commit - b1e0b4c7e446aa963c72d8371bd0651a28da3490
commit + 01059301696c508a9fe382ca12c6aec6491abe90
blob - 9acee3187928982ad93c166fbba76dbc848baa5f
blob + 1d5e15ccae9b18a52b22bd04d4e826b0fa7ab060
--- luzer/tests/CMakeLists.txt
+++ luzer/tests/CMakeLists.txt
ENVIRONMENT "LUA_CPATH=${LUA_CPATH};LUA_PATH=${LUA_PATH}"
PASS_REGULAR_EXPRESSION "Crash!"
)
+
+add_library(goodbye SHARED test_goodbye.c)
+target_include_directories(goodbye PRIVATE ${LUA_INCLUDE_DIR})
+target_link_libraries(goodbye PRIVATE
+ ${FUZZER_NO_MAIN_LIBRARY}
+)
+target_compile_options(goodbye PRIVATE
+ -fsanitize=fuzzer-no-link
+ -fprofile-instr-generate
+)
+
+add_test(
+ NAME luzer_lua_ffi_goodbye
+ COMMAND ${LUA_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/test_goodbye.lua"
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+)
+set_tests_properties(luzer_lua_ffi_goodbye PROPERTIES
+ ENVIRONMENT "LUA_CPATH=${LUA_CPATH};LUA_PATH=${LUA_PATH}"
+ PASS_REGULAR_EXPRESSION "Crash!"
+)
blob - /dev/null
blob + 2e18bb0a2f3d20d24c46da3d3d6bf66d677c3bf5 (mode 644)
--- /dev/null
+++ luzer/tests/test_goodbye.c
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#define MESSAGE "Goodbye, Lua!"
+
+int
+say_goodbye(const char *buf) {
+ if (strncmp(buf, MESSAGE, sizeof(MESSAGE)) == 0) {
+ fprintf(stderr, "Crash!\n");
+ abort();
+ }
+
+ return 1;
+}
blob - /dev/null
blob + 36bb9a42871f38af25c19e7ae034ec22e0df410d (mode 644)
--- /dev/null
+++ luzer/tests/test_goodbye.lua
+local luzer = require("luzer")
+local has_ffi, ffi = pcall(require, "ffi")
+if not has_ffi then
+ os.exit(0)
+end
+
+ffi.cdef[[
+int say_goodbye(const char *buf);
+]]
+
+local function TestOneInput(buf)
+ local fdp = luzer.FuzzedDataProvider(buf)
+ local len = fdp:consume_integer(1, 100)
+ local str = fdp:consume_string(len)
+ local libgoodbye = ffi.load("./build/luzer/tests/libgoodbye.so")
+ libgoodbye.say_goodbye(str)
+end
+
+local opts = {
+ detect_leaks = 1,
+ max_len = 4096,
+ only_ascii = 1,
+ print_coverage = 1,
+ print_full_coverage = 1,
+ print_pcs = 1,
+ use_cmp = 1,
+ use_value_profile = 1,
+ runs = 100000,
+}
+luzer.Fuzz(TestOneInput, nil, opts)