OSS-Fuzz initial integration (#216)
* add fuzz target * update fuzzer * add fuzzer to build with basic entry point * add build script * cleanup * build fuzz target using cmake in oss-fuzz env * ossfuzz.sh add newline * update build
This commit is contained in:
parent
610730f231
commit
c17ea5dfef
@ -15,6 +15,7 @@ set(SO_PATCH 1)
|
|||||||
|
|
||||||
option(UTF8PROC_INSTALL "Enable installation of utf8proc" On)
|
option(UTF8PROC_INSTALL "Enable installation of utf8proc" On)
|
||||||
option(UTF8PROC_ENABLE_TESTING "Enable testing of utf8proc" Off)
|
option(UTF8PROC_ENABLE_TESTING "Enable testing of utf8proc" Off)
|
||||||
|
option(LIB_FUZZING_ENGINE "Fuzzing engine to link against" Off)
|
||||||
|
|
||||||
add_library (utf8proc
|
add_library (utf8proc
|
||||||
utf8proc.c
|
utf8proc.c
|
||||||
@ -98,4 +99,12 @@ if(UTF8PROC_ENABLE_TESTING)
|
|||||||
target_link_libraries(normtest utf8proc)
|
target_link_libraries(normtest utf8proc)
|
||||||
add_test(utf8proc.testgraphemetest graphemetest data/GraphemeBreakTest.txt)
|
add_test(utf8proc.testgraphemetest graphemetest data/GraphemeBreakTest.txt)
|
||||||
add_test(utf8proc.testnormtest normtest data/NormalizationTest.txt)
|
add_test(utf8proc.testnormtest normtest data/NormalizationTest.txt)
|
||||||
|
|
||||||
|
if(LIB_FUZZING_ENGINE)
|
||||||
|
add_executable(fuzzer utf8proc.h test/fuzzer.c)
|
||||||
|
target_link_libraries(fuzzer ${LIB_FUZZING_ENGINE} utf8proc)
|
||||||
|
else()
|
||||||
|
add_executable(fuzzer utf8proc.h test/fuzz_main.c test/fuzzer.c)
|
||||||
|
target_link_libraries(fuzzer utf8proc)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
54
test/fuzz_main.c
Normal file
54
test/fuzz_main.c
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/* Fuzz target entry point, works without libFuzzer */
|
||||||
|
|
||||||
|
int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size);
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
char *buf = NULL;
|
||||||
|
long siz_buf;
|
||||||
|
|
||||||
|
if(argc < 2)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "no input file\n");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
f = fopen(argv[1], "rb");
|
||||||
|
if(f == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "error opening input file %s\n", argv[1]);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
fseek(f, 0, SEEK_END);
|
||||||
|
|
||||||
|
siz_buf = ftell(f);
|
||||||
|
rewind(f);
|
||||||
|
|
||||||
|
if(siz_buf < 1) goto err;
|
||||||
|
|
||||||
|
buf = (char*)malloc(siz_buf);
|
||||||
|
if(buf == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "malloc() failed\n");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(fread(buf, siz_buf, 1, f) != 1)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "fread() failed\n");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
(void)LLVMFuzzerTestOneInput((uint8_t*)buf, siz_buf);
|
||||||
|
|
||||||
|
err:
|
||||||
|
free(buf);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
16
test/fuzzer.c
Normal file
16
test/fuzzer.c
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#include <utf8proc.h>
|
||||||
|
|
||||||
|
int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
|
||||||
|
{
|
||||||
|
if(size < 1) return 0;
|
||||||
|
|
||||||
|
if(data[size-1] != '\0') return 0;
|
||||||
|
|
||||||
|
free(utf8proc_NFD(data));
|
||||||
|
free(utf8proc_NFC(data));
|
||||||
|
free(utf8proc_NFKD(data));
|
||||||
|
free(utf8proc_NFKC(data));
|
||||||
|
free(utf8proc_NFKC_Casefold(data));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
13
test/ossfuzz.sh
Executable file
13
test/ossfuzz.sh
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash -eu
|
||||||
|
# This script is meant to be run by
|
||||||
|
# https://github.com/google/oss-fuzz/blob/master/projects/utf8proc/Dockerfile
|
||||||
|
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake .. -DUTF8PROC_ENABLE_TESTING=ON -DLIB_FUZZING_ENGINE="$LIB_FUZZING_ENGINE"
|
||||||
|
make -j$(nproc)
|
||||||
|
|
||||||
|
cp $SRC/utf8proc/build/fuzzer utf8proc_fuzzer
|
||||||
|
|
||||||
|
find $SRC/utf8proc/test -name "*.txt" | \
|
||||||
|
xargs zip $OUT/utf8proc_fuzzer_seed_corpus.zip
|
||||||
Loading…
Reference in New Issue
Block a user