diff --git a/targets/file/build.sh b/targets/file/build.sh index 64a1710bb..a040af93a 100755 --- a/targets/file/build.sh +++ b/targets/file/build.sh @@ -24,3 +24,6 @@ make V=1 all $CXX $CXXFLAGS -std=c++11 -Isrc/ \ /src/magic_fuzzer.cc -o /out/magic_fuzzer \ -lfuzzer ./src/.libs/libmagic.a $FUZZER_LDFLAGS + +cp ./magic/magic.mgc /out/ + diff --git a/targets/file/magic_fuzzer.cc b/targets/file/magic_fuzzer.cc index 713ffbe2a..ca34a4831 100644 --- a/targets/file/magic_fuzzer.cc +++ b/targets/file/magic_fuzzer.cc @@ -14,15 +14,28 @@ #include #include +#include +#include #include +struct Environment { + Environment() { + magic = magic_open(MAGIC_NONE); + if (magic_load(magic, "magic")) { + fprintf(stderr, "error loading magic file: %s\n", magic_error(magic)); + exit(1); + } + } + + magic_t magic; +}; + +static Environment env; + extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if (size < 1) return 0; - - magic_t magic = magic_open(MAGIC_NONE); - magic_buffer(magic, data, size); - magic_close(magic); + magic_buffer(env.magic, data, size); return 0; }