From ba0f78d1cb95971fd200978853e67809380c14a7 Mon Sep 17 00:00:00 2001 From: Dongge Liu Date: Mon, 23 Sep 2024 10:22:48 +1000 Subject: [PATCH 1/4] temp file --- temp | 1 + 1 file changed, 1 insertion(+) create mode 100644 temp diff --git a/temp b/temp new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/temp @@ -0,0 +1 @@ + From b36f237dda961e569fc3a4aeb19f89375c81c014 Mon Sep 17 00:00:00 2001 From: Qirui Tang <66986397+Once2gain@users.noreply.github.com> Date: Tue, 24 Sep 2024 05:56:48 +0800 Subject: [PATCH 2/4] fix bugs && prepare 50 cases with headerfiles (#643) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Statement**: Most modifications to the original code of `oss-fuzz-gen` (including items 2. and 3. below) are for the convenience of current testing and performance comparison based on Gemini. The current changes will not be the final merge changes. Modifications to be noted: 1. Changed c projects like **picotls**, **libvnc**'s language setting in yaml from c++ to c. Otherwise, the prompt will provide an example of c++, and the large model imitation the c++ example to include FuzzydDataProvider. h (c++). 2. Added `headerfiles `project as a module in the oss-fuzz-gen project. Therefore, the include statement changed from _import headerfiles.api as headerfiles_ to _from headerfiles.headerfiles import api as headerfiles_. (This facilitates us to adjust the code in the `headerfiles` at any time, and eventually, we will package it as an external library) 3. Changed the function: https://github.com/occia/oss-fuzz-gen/blob/e71091bab8b4ac20a2e575ee9f7cbce91a987fdd/data_prep/project_src.py#L238 to avoid the bug: "docker: Error response from daemon: Conflict." 4. Project **bind9**: Execute _make "-j\$(nproc)"_ in original build.sh sometimes cause link errors, related to the setting of multithreading in the project. Execute _make_ produce no errors (by headersfile_updated_script). 5. Project **openexr**: The header files introduced by `headerfiles` will be part of the prompt, occasionally affecting the generation of LLM. Haven't found a solution yet. _"We have prepared the following list of headers which covers all target project APIs and will prepend them as #include statments at the beginning of your generated fuzz target. Therefore, you only need to include the headers of non-target-project APIs used in your fuzz target. \ dns/acl.h..."_. Overall Results: (Based on GPT-4o) PROJ | ORI | FIX -- | -- | -- avahi | 16 | 18 bind9 | 21 | 14 bluez | 0 | 0 brotli | 0 | 1 capstone | 35 | 50 coturn | 16 | 18 croaring | 42 | 50 igraph | 0 | 0 kamailio | 6 | 28 krb5 | 0 | 0 lcms | 0 | 37 libbpf | 0 | 39 libcoap | 0 | 0 libevent | 4 | 28 libfido2 | 0 | 50 libical | 6 | 16 libjpeg-turbo | 39 | 50 libpcap | 50 | 50 librdkafka | 0 | 0 libsndfile | 39 | 45 libsodium | 0 | 0 libssh2 | 26 | 25 libssh | 22 | 32 libtpms | 40 | 40 libusb | 1 | 27 libvnc | 0 | 24 libxls | 0 | 33 libyang | 1 | 0 lwan | 0 | 8 mbedtls | 0 | 16 mdbtools | 0 | 0 minizip | 50 | 50 ndpi | 1 | 7 njs | 2 | 0 oniguruma | 20 | 20 openexr | 17 | 0 opusfile | 23 | 36 picotls | 43 | 41 pjsip | 14 | 19 proftpd | 23 | 44 pupnp | 29 | 29 sleuthkit | 0 | 0 tidy-html5 | 35 | 39 unicorn | 0 | 0 unit | 15 | 13 utf8proc | 20 | 20 vlc | 6 | 9 w3m | 34 | 30 wasm3 | 5 | 15 zydis | 0 | 0 --------- Co-authored-by: Cen Zhang --- benchmark-sets/headerfiles/README.md | 9 + benchmark-sets/headerfiles/avahi.yaml | 56 + benchmark-sets/headerfiles/bind9.yaml | 70 + benchmark-sets/headerfiles/bluez.yaml | 86 + benchmark-sets/headerfiles/brotli.yaml | 58 + benchmark-sets/headerfiles/capstone.yaml | 84 + benchmark-sets/headerfiles/coturn.yaml | 110 + benchmark-sets/headerfiles/croaring.yaml | 52 + benchmark-sets/headerfiles/igraph.yaml | 22 + benchmark-sets/headerfiles/kamailio.yaml | 26 + benchmark-sets/headerfiles/krb5.yaml | 130 ++ benchmark-sets/headerfiles/lcms.yaml | 84 + benchmark-sets/headerfiles/libbpf.yaml | 44 + benchmark-sets/headerfiles/libcoap.yaml | 84 + benchmark-sets/headerfiles/libevent.yaml | 54 + benchmark-sets/headerfiles/libfido2.yaml | 46 + benchmark-sets/headerfiles/libical.yaml | 60 + benchmark-sets/headerfiles/libjpeg-turbo.yaml | 112 + benchmark-sets/headerfiles/libpcap.yaml | 68 + benchmark-sets/headerfiles/librdkafka.yaml | 18 + benchmark-sets/headerfiles/libsndfile.yaml | 62 + benchmark-sets/headerfiles/libsodium.yaml | 50 + benchmark-sets/headerfiles/libssh.yaml | 56 + benchmark-sets/headerfiles/libssh2.yaml | 62 + benchmark-sets/headerfiles/libtpms.yaml | 71 + benchmark-sets/headerfiles/libusb.yaml | 74 + benchmark-sets/headerfiles/libvnc.yaml | 50 + benchmark-sets/headerfiles/libxls.yaml | 46 + benchmark-sets/headerfiles/libyang.yaml | 76 + benchmark-sets/headerfiles/lwan.yaml | 46 + benchmark-sets/headerfiles/mbedtls.yaml | 53 + benchmark-sets/headerfiles/mdbtools.yaml | 54 + benchmark-sets/headerfiles/minizip.yaml | 52 + benchmark-sets/headerfiles/ndpi.yaml | 60 + benchmark-sets/headerfiles/njs.yaml | 60 + benchmark-sets/headerfiles/oniguruma.yaml | 35 + benchmark-sets/headerfiles/openexr.yaml | 58 + benchmark-sets/headerfiles/opusfile.yaml | 58 + benchmark-sets/headerfiles/picotls.yaml | 88 + benchmark-sets/headerfiles/pjsip.yaml | 78 + benchmark-sets/headerfiles/proftpd.yaml | 68 + benchmark-sets/headerfiles/pupnp.yaml | 50 + benchmark-sets/headerfiles/sleuthkit.yaml | 68 + benchmark-sets/headerfiles/tidy-html5.yaml | 48 + benchmark-sets/headerfiles/unicorn.yaml | 64 + benchmark-sets/headerfiles/unit.yaml | 52 + benchmark-sets/headerfiles/utf8proc.yaml | 27 + benchmark-sets/headerfiles/vlc.yaml | 46 + benchmark-sets/headerfiles/w3m.yaml | 46 + benchmark-sets/headerfiles/wasm3.yaml | 19 + benchmark-sets/headerfiles/zydis.yaml | 54 + data_prep/introspector.py | 4 +- .../project_context/context_introspector.py | 20 +- data_prep/project_src.py | 6 +- experiment/builder_runner.py | 2 + experiment/evaluator.py | 31 +- headerfiles/.gitignore | 27 + headerfiles/DEV.md | 13 + headerfiles/LICENSE | 202 ++ headerfiles/MANIFEST.in | 5 + headerfiles/README.md | 83 + headerfiles/__init__.py | 0 headerfiles/headerfiles/__init__.py | 0 headerfiles/headerfiles/api.py | 84 + headerfiles/headerfiles/cli.py | 28 + headerfiles/headerfiles/data/headerfiles.json | 1938 +++++++++++++++++ .../headerfiles/data/headerfiles.json.bk | 246 +++ headerfiles/release.sh | 35 + headerfiles/setup.py | 36 + headerfiles/tests/test_api.py | 25 + llm_toolkit/prompt_builder.py | 33 +- prompts/template_xml/context.txt | 9 +- run_one_experiment.py | 2 +- 73 files changed, 5822 insertions(+), 11 deletions(-) create mode 100644 benchmark-sets/headerfiles/README.md create mode 100644 benchmark-sets/headerfiles/avahi.yaml create mode 100644 benchmark-sets/headerfiles/bind9.yaml create mode 100644 benchmark-sets/headerfiles/bluez.yaml create mode 100644 benchmark-sets/headerfiles/brotli.yaml create mode 100644 benchmark-sets/headerfiles/capstone.yaml create mode 100644 benchmark-sets/headerfiles/coturn.yaml create mode 100644 benchmark-sets/headerfiles/croaring.yaml create mode 100644 benchmark-sets/headerfiles/igraph.yaml create mode 100644 benchmark-sets/headerfiles/kamailio.yaml create mode 100644 benchmark-sets/headerfiles/krb5.yaml create mode 100644 benchmark-sets/headerfiles/lcms.yaml create mode 100644 benchmark-sets/headerfiles/libbpf.yaml create mode 100644 benchmark-sets/headerfiles/libcoap.yaml create mode 100644 benchmark-sets/headerfiles/libevent.yaml create mode 100644 benchmark-sets/headerfiles/libfido2.yaml create mode 100644 benchmark-sets/headerfiles/libical.yaml create mode 100644 benchmark-sets/headerfiles/libjpeg-turbo.yaml create mode 100644 benchmark-sets/headerfiles/libpcap.yaml create mode 100644 benchmark-sets/headerfiles/librdkafka.yaml create mode 100644 benchmark-sets/headerfiles/libsndfile.yaml create mode 100644 benchmark-sets/headerfiles/libsodium.yaml create mode 100644 benchmark-sets/headerfiles/libssh.yaml create mode 100644 benchmark-sets/headerfiles/libssh2.yaml create mode 100644 benchmark-sets/headerfiles/libtpms.yaml create mode 100644 benchmark-sets/headerfiles/libusb.yaml create mode 100644 benchmark-sets/headerfiles/libvnc.yaml create mode 100644 benchmark-sets/headerfiles/libxls.yaml create mode 100644 benchmark-sets/headerfiles/libyang.yaml create mode 100644 benchmark-sets/headerfiles/lwan.yaml create mode 100644 benchmark-sets/headerfiles/mbedtls.yaml create mode 100644 benchmark-sets/headerfiles/mdbtools.yaml create mode 100644 benchmark-sets/headerfiles/minizip.yaml create mode 100644 benchmark-sets/headerfiles/ndpi.yaml create mode 100644 benchmark-sets/headerfiles/njs.yaml create mode 100644 benchmark-sets/headerfiles/oniguruma.yaml create mode 100644 benchmark-sets/headerfiles/openexr.yaml create mode 100644 benchmark-sets/headerfiles/opusfile.yaml create mode 100644 benchmark-sets/headerfiles/picotls.yaml create mode 100644 benchmark-sets/headerfiles/pjsip.yaml create mode 100644 benchmark-sets/headerfiles/proftpd.yaml create mode 100644 benchmark-sets/headerfiles/pupnp.yaml create mode 100644 benchmark-sets/headerfiles/sleuthkit.yaml create mode 100644 benchmark-sets/headerfiles/tidy-html5.yaml create mode 100644 benchmark-sets/headerfiles/unicorn.yaml create mode 100644 benchmark-sets/headerfiles/unit.yaml create mode 100644 benchmark-sets/headerfiles/utf8proc.yaml create mode 100644 benchmark-sets/headerfiles/vlc.yaml create mode 100644 benchmark-sets/headerfiles/w3m.yaml create mode 100644 benchmark-sets/headerfiles/wasm3.yaml create mode 100644 benchmark-sets/headerfiles/zydis.yaml create mode 100644 headerfiles/.gitignore create mode 100644 headerfiles/DEV.md create mode 100644 headerfiles/LICENSE create mode 100644 headerfiles/MANIFEST.in create mode 100644 headerfiles/README.md create mode 100644 headerfiles/__init__.py create mode 100644 headerfiles/headerfiles/__init__.py create mode 100644 headerfiles/headerfiles/api.py create mode 100644 headerfiles/headerfiles/cli.py create mode 100644 headerfiles/headerfiles/data/headerfiles.json create mode 100644 headerfiles/headerfiles/data/headerfiles.json.bk create mode 100644 headerfiles/release.sh create mode 100644 headerfiles/setup.py create mode 100644 headerfiles/tests/test_api.py diff --git a/benchmark-sets/headerfiles/README.md b/benchmark-sets/headerfiles/README.md new file mode 100644 index 0000000000..f2053022b2 --- /dev/null +++ b/benchmark-sets/headerfiles/README.md @@ -0,0 +1,9 @@ +Selected 50 projects to test the effectiveness of headerfiles. It should be noted that we have corrected the language settings of the following projects: + +**From c++ to c:** +avahi.yaml, brotli.yaml, capstone.yaml, lcms.yaml, libcoap.yaml, libfido2.yaml, libpcap.yaml, librdkafka.yaml, libtpms.yaml, libvnc.yaml, libxls.yaml, mbedtls.yaml, minizip.yaml, ndpi.yaml, njs.yaml, picotls.yaml, tidy-html5.yaml, unicorn.yaml + +(In case of incorrect settings, prompt will provide a c++ fuzz target example, and LLM will mimic it by including "FuzzydDataProvider.h", causing compilation errors.) + +**From c to c++:** +libjpeg-turbo.yaml, libsndfile.yaml diff --git a/benchmark-sets/headerfiles/avahi.yaml b/benchmark-sets/headerfiles/avahi.yaml new file mode 100644 index 0000000000..0e39418f03 --- /dev/null +++ b/benchmark-sets/headerfiles/avahi.yaml @@ -0,0 +1,56 @@ +"functions": +- "exceptions": [] + "name": "avahi_string_list_new" + "params": + - "name": "txt" + "type": "bool " + "return_type": "void" + "signature": "AvahiStringList * avahi_string_list_new(const char *, void)" +- "exceptions": [] + "name": "avahi_string_list_add_vprintf" + "params": + - "name": "l" + "type": "bool " + - "name": "format" + "type": "bool " + - "name": "va" + "type": "bool " + "return_type": "void" + "signature": "AvahiStringList * avahi_string_list_add_vprintf(AvahiStringList *, const char *, struct __va_list_tag *)" +- "exceptions": [] + "name": "avahi_string_list_add_printf" + "params": + - "name": "l" + "type": "bool " + - "name": "format" + "type": "bool " + "return_type": "void" + "signature": "AvahiStringList * avahi_string_list_add_printf(AvahiStringList *, const char *, void)" +- "exceptions": [] + "name": "avahi_dns_packet_new_reply" + "params": + - "name": "p" + "type": "bool " + - "name": "mtu" + "type": "int" + - "name": "copy_queries" + "type": "int" + - "name": "aa" + "type": "int" + "return_type": "void" + "signature": "AvahiDnsPacket * avahi_dns_packet_new_reply(AvahiDnsPacket *, unsigned int, int, int)" +- "exceptions": [] + "name": "avahi_string_list_add_pair" + "params": + - "name": "l" + "type": "bool " + - "name": "key" + "type": "bool " + - "name": "value" + "type": "bool " + "return_type": "void" + "signature": "AvahiStringList * avahi_string_list_add_pair(AvahiStringList *, const char *, const char *)" +"language": "c" +"project": "avahi" +"target_name": "fuzz-packet" +"target_path": "/src/avahi/fuzz/fuzz-packet.c" diff --git a/benchmark-sets/headerfiles/bind9.yaml b/benchmark-sets/headerfiles/bind9.yaml new file mode 100644 index 0000000000..29c7932a08 --- /dev/null +++ b/benchmark-sets/headerfiles/bind9.yaml @@ -0,0 +1,70 @@ +"functions": +- "exceptions": [] + "name": "dns_view_freezezones" + "params": + - "name": "view" + "type": "bool " + - "name": "value" + "type": "bool" + "return_type": "int" + "signature": "isc_result_t dns_view_freezezones(dns_view_t *, bool)" +- "exceptions": [] + "name": "dns_view_asyncload" + "params": + - "name": "view" + "type": "bool " + - "name": "newonly" + "type": "bool" + - "name": "callback" + "type": "bool " + - "name": "arg" + "type": "bool " + "return_type": "int" + "signature": "isc_result_t dns_view_asyncload(dns_view_t *, bool, dns_zt_callback_t *, void *)" +- "exceptions": [] + "name": "dns_zt_asyncload" + "params": + - "name": "zt" + "type": "bool " + - "name": "newonly" + "type": "bool" + - "name": "loaddone" + "type": "bool " + - "name": "arg" + "type": "bool " + "return_type": "int" + "signature": "isc_result_t dns_zt_asyncload(dns_zt_t *, bool, dns_zt_callback_t *, void *)" +- "exceptions": [] + "name": "dns_zt_freezezones" + "params": + - "name": "zt" + "type": "bool " + - "name": "view" + "type": "bool " + - "name": "freeze" + "type": "bool" + "return_type": "int" + "signature": "isc_result_t dns_zt_freezezones(dns_zt_t *, dns_view_t *, bool)" +- "exceptions": [] + "name": "dns__rbtdb_addrdataset" + "params": + - "name": "db" + "type": "bool " + - "name": "node" + "type": "bool " + - "name": "version" + "type": "bool " + - "name": "now" + "type": "int" + - "name": "rdataset" + "type": "bool " + - "name": "options" + "type": "int" + - "name": "addedrdataset" + "type": "bool " + "return_type": "int" + "signature": "isc_result_t dns__rbtdb_addrdataset(dns_db_t *, dns_dbnode_t *, dns_dbversion_t *, isc_stdtime_t, dns_rdataset_t *, unsigned int, dns_rdataset_t *)" +"language": "c" +"project": "bind9" +"target_name": "dns_qpkey_name_fuzzer" +"target_path": "/src/bind9/fuzz/dns_qpkey_name.c" diff --git a/benchmark-sets/headerfiles/bluez.yaml b/benchmark-sets/headerfiles/bluez.yaml new file mode 100644 index 0000000000..5faf66ce82 --- /dev/null +++ b/benchmark-sets/headerfiles/bluez.yaml @@ -0,0 +1,86 @@ +"functions": +- "exceptions": [] + "name": "g_obex_put_req" + "params": + - "name": "obex" + "type": "bool " + - "name": "data_func" + "type": "bool " + - "name": "complete_func" + "type": "bool " + - "name": "user_data" + "type": "bool " + - "name": "err" + "type": "bool " + - "name": "first_hdr_id" + "type": "int" + "return_type": "int" + "signature": "guint g_obex_put_req(GObex *, GObexDataProducer, GObexFunc, gpointer, GError **, guint, void)" +- "exceptions": [] + "name": "g_obex_new" + "params": + - "name": "io" + "type": "bool " + - "name": "transport_type" + "type": "int" + - "name": "io_rx_mtu" + "type": "size_t" + - "name": "io_tx_mtu" + "type": "size_t" + "return_type": "void" + "signature": "GObex * g_obex_new(GIOChannel *, GObexTransportType, gssize, gssize)" +- "exceptions": [] + "name": "g_obex_get_req" + "params": + - "name": "obex" + "type": "bool " + - "name": "data_func" + "type": "bool " + - "name": "complete_func" + "type": "bool " + - "name": "user_data" + "type": "bool " + - "name": "err" + "type": "bool " + - "name": "first_hdr_id" + "type": "int" + "return_type": "int" + "signature": "guint g_obex_get_req(GObex *, GObexDataConsumer, GObexFunc, gpointer, GError **, guint, void)" +- "exceptions": [] + "name": "g_obex_get_req_pkt" + "params": + - "name": "obex" + "type": "bool " + - "name": "req" + "type": "bool " + - "name": "data_func" + "type": "bool " + - "name": "complete_func" + "type": "bool " + - "name": "user_data" + "type": "bool " + - "name": "err" + "type": "bool " + "return_type": "int" + "signature": "guint g_obex_get_req_pkt(GObex *, GObexPacket *, GObexDataConsumer, GObexFunc, gpointer, GError **)" +- "exceptions": [] + "name": "g_obex_put_req_pkt" + "params": + - "name": "obex" + "type": "bool " + - "name": "req" + "type": "bool " + - "name": "data_func" + "type": "bool " + - "name": "complete_func" + "type": "bool " + - "name": "user_data" + "type": "bool " + - "name": "err" + "type": "bool " + "return_type": "int" + "signature": "guint g_obex_put_req_pkt(GObex *, GObexPacket *, GObexDataProducer, GObexFunc, gpointer, GError **)" +"language": "c" +"project": "bluez" +"target_name": "fuzz_sdp" +"target_path": "/src/fuzz_sdp.c" diff --git a/benchmark-sets/headerfiles/brotli.yaml b/benchmark-sets/headerfiles/brotli.yaml new file mode 100644 index 0000000000..c088f640e9 --- /dev/null +++ b/benchmark-sets/headerfiles/brotli.yaml @@ -0,0 +1,58 @@ +"functions": +- "exceptions": [] + "name": "BrotliDecoderAttachDictionary" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "int" + - "name": "" + "type": "size_t" + - "name": "" + "type": "bool " + "return_type": "int" + "signature": "int BrotliDecoderAttachDictionary(BrotliDecoderStateInternal *, BrotliSharedDictionaryType, size_t, const uint8_t *)" +- "exceptions": [] + "name": "BrotliDecoderIsFinished" + "params": + - "name": "" + "type": "bool " + "return_type": "int" + "signature": "int BrotliDecoderIsFinished(const BrotliDecoderStateInternal *)" +- "exceptions": [] + "name": "BrotliSafeReadBits32Slow" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "size_t" + - "name": "" + "type": "bool " + "return_type": "int" + "signature": "int BrotliSafeReadBits32Slow(const BrotliBitReader *, uint64_t, uint64_t *)" +- "exceptions": [] + "name": "BrotliDecoderDecompress" + "params": + - "name": "" + "type": "size_t" + - "name": "" + "type": "bool " + - "name": "" + "type": "bool " + - "name": "" + "type": "bool " + "return_type": "int" + "signature": "BrotliDecoderResult BrotliDecoderDecompress(size_t, const uint8_t *, size_t *, uint8_t *)" +- "exceptions": [] + "name": "BrotliDecoderTakeOutput" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "bool " + "return_type": "void" + "signature": "const uint8_t * BrotliDecoderTakeOutput(BrotliDecoderStateInternal *, size_t *)" +"language": "c" +"project": "brotli" +"target_name": "decode_fuzzer" +"target_path": "/src/brotli/c/fuzz/decode_fuzzer.c" diff --git a/benchmark-sets/headerfiles/capstone.yaml b/benchmark-sets/headerfiles/capstone.yaml new file mode 100644 index 0000000000..c672515bde --- /dev/null +++ b/benchmark-sets/headerfiles/capstone.yaml @@ -0,0 +1,84 @@ +"functions": +- "exceptions": [] + "name": "BPF_getInstruction" + "params": + - "name": "ud" + "type": "size_t" + - "name": "code" + "type": "bool " + - "name": "code_len" + "type": "size_t" + - "name": "instr" + "type": "bool " + - "name": "size" + "type": "bool " + - "name": "address" + "type": "size_t" + - "name": "info" + "type": "bool " + "return_type": "bool" + "signature": "bool BPF_getInstruction(csh, const uint8_t *, size_t, MCInst *, uint16_t *, uint64_t, void *)" +- "exceptions": [] + "name": "LoongArch_printer" + "params": + - "name": "MI" + "type": "bool " + - "name": "O" + "type": "bool " + - "name": "info" + "type": "bool " + "return_type": "void" + "signature": "void LoongArch_printer(MCInst *, SStream *, void *)" +- "exceptions": [] + "name": "PPC_getInstruction" + "params": + - "name": "ud" + "type": "size_t" + - "name": "code" + "type": "bool " + - "name": "code_len" + "type": "size_t" + - "name": "instr" + "type": "bool " + - "name": "size" + "type": "bool " + - "name": "address" + "type": "size_t" + - "name": "info" + "type": "bool " + "return_type": "bool" + "signature": "bool PPC_getInstruction(csh, const uint8_t *, size_t, MCInst *, uint16_t *, uint64_t, void *)" +- "exceptions": [] + "name": "ARM_getInstruction" + "params": + - "name": "ud" + "type": "size_t" + - "name": "code" + "type": "bool " + - "name": "code_len" + "type": "size_t" + - "name": "instr" + "type": "bool " + - "name": "size" + "type": "bool " + - "name": "address" + "type": "size_t" + - "name": "info" + "type": "bool " + "return_type": "bool" + "signature": "bool ARM_getInstruction(csh, const uint8_t *, size_t, MCInst *, uint16_t *, uint64_t, void *)" +- "exceptions": [] + "name": "AArch64_printer" + "params": + - "name": "MI" + "type": "bool " + - "name": "O" + "type": "bool " + - "name": "info" + "type": "bool " + "return_type": "void" + "signature": "void AArch64_printer(MCInst *, SStream *, void *)" +"language": "c" +"project": "capstone" +"target_name": "driverbin" +"target_path": "/src/capstonev5/suite/fuzz/driverbin.c" diff --git a/benchmark-sets/headerfiles/coturn.yaml b/benchmark-sets/headerfiles/coturn.yaml new file mode 100644 index 0000000000..aa7c3b8ab1 --- /dev/null +++ b/benchmark-sets/headerfiles/coturn.yaml @@ -0,0 +1,110 @@ +"functions": +- "exceptions": [] + "name": "stun_set_allocate_response_str" + "params": + - "name": "buf" + "type": "bool " + - "name": "len" + "type": "bool " + - "name": "tid" + "type": "bool " + - "name": "relayed_addr1" + "type": "bool " + - "name": "relayed_addr2" + "type": "bool " + - "name": "reflexive_addr" + "type": "bool " + - "name": "lifetime" + "type": "int" + - "name": "max_lifetime" + "type": "int" + - "name": "error_code" + "type": "int" + - "name": "reason" + "type": "bool " + - "name": "reservation_token" + "type": "size_t" + - "name": "mobile_id" + "type": "bool " + "return_type": "int" + "signature": "int stun_set_allocate_response_str(uint8_t *, size_t *, stun_tid *, const ioa_addr *, const ioa_addr *, const ioa_addr *, uint32_t, uint32_t, int, const uint8_t *, uint64_t, char *)" +- "exceptions": [] + "name": "stun_set_binding_response" + "params": + - "name": "buf" + "type": "bool " + - "name": "tid" + "type": "bool " + - "name": "reflexive_addr" + "type": "bool " + - "name": "error_code" + "type": "int" + - "name": "reason" + "type": "bool " + "return_type": "int" + "signature": "int stun_set_binding_response(stun_buffer *, stun_tid *, const ioa_addr *, int, const uint8_t *)" +- "exceptions": [] + "name": "stun_set_channel_bind_request" + "params": + - "name": "buf" + "type": "bool " + - "name": "peer_addr" + "type": "bool " + - "name": "channel_number" + "type": "short" + "return_type": "short" + "signature": "uint16_t stun_set_channel_bind_request(stun_buffer *, const ioa_addr *, uint16_t)" +- "exceptions": [] + "name": "stun_set_allocate_response" + "params": + - "name": "buf" + "type": "bool " + - "name": "tid" + "type": "bool " + - "name": "relayed_addr1" + "type": "bool " + - "name": "relayed_addr2" + "type": "bool " + - "name": "reflexive_addr" + "type": "bool " + - "name": "lifetime" + "type": "int" + - "name": "max_lifetime" + "type": "int" + - "name": "error_code" + "type": "int" + - "name": "reason" + "type": "bool " + - "name": "reservation_token" + "type": "size_t" + - "name": "mobile_id" + "type": "bool " + "return_type": "int" + "signature": "int stun_set_allocate_response(stun_buffer *, stun_tid *, const ioa_addr *, const ioa_addr *, const ioa_addr *, uint32_t, uint32_t, int, const uint8_t *, uint64_t, char *)" +- "exceptions": [] + "name": "stun_set_binding_response_str" + "params": + - "name": "buf" + "type": "bool " + - "name": "len" + "type": "bool " + - "name": "tid" + "type": "bool " + - "name": "reflexive_addr" + "type": "bool " + - "name": "error_code" + "type": "int" + - "name": "reason" + "type": "bool " + - "name": "cookie" + "type": "int" + - "name": "old_stun" + "type": "int" + - "name": "no_stun_backward_compatibility" + "type": "int" + "return_type": "int" + "signature": "int stun_set_binding_response_str(uint8_t *, size_t *, stun_tid *, const ioa_addr *, int, const uint8_t *, uint32_t, int, int)" +"language": "c" +"project": "coturn" +"target_name": "FuzzStun" +"target_path": "/src/coturn/fuzzing/FuzzStun.c" diff --git a/benchmark-sets/headerfiles/croaring.yaml b/benchmark-sets/headerfiles/croaring.yaml new file mode 100644 index 0000000000..438e7b73a4 --- /dev/null +++ b/benchmark-sets/headerfiles/croaring.yaml @@ -0,0 +1,52 @@ +"functions": +- "exceptions": [] + "name": "roaring_bitmap_or_many" + "params": + - "name": "" + "type": "size_t" + - "name": "" + "type": "bool " + "return_type": "void" + "signature": "roaring_bitmap_t * roaring_bitmap_or_many(size_t, const roaring_bitmap_t **)" +- "exceptions": [] + "name": "roaring_bitmap_lazy_xor_inplace" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "bool " + "return_type": "void" + "signature": "void roaring_bitmap_lazy_xor_inplace(roaring_bitmap_t *, const roaring_bitmap_t *)" +- "exceptions": [] + "name": "roaring_bitmap_add_offset" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "size_t" + "return_type": "void" + "signature": "roaring_bitmap_t * roaring_bitmap_add_offset(const roaring_bitmap_t *, int64_t)" +- "exceptions": [] + "name": "roaring_bitmap_xor_many" + "params": + - "name": "" + "type": "size_t" + - "name": "" + "type": "bool " + "return_type": "void" + "signature": "roaring_bitmap_t * roaring_bitmap_xor_many(size_t, const roaring_bitmap_t **)" +- "exceptions": [] + "name": "roaring_bitmap_lazy_or" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "bool " + - "name": "" + "type": "bool" + "return_type": "void" + "signature": "roaring_bitmap_t * roaring_bitmap_lazy_or(const roaring_bitmap_t *, const roaring_bitmap_t *, const _Bool)" +"language": "c" +"project": "croaring" +"target_name": "croaring_fuzzer" +"target_path": "/src/croaring_fuzzer.c" diff --git a/benchmark-sets/headerfiles/igraph.yaml b/benchmark-sets/headerfiles/igraph.yaml new file mode 100644 index 0000000000..d5c0f63cb3 --- /dev/null +++ b/benchmark-sets/headerfiles/igraph.yaml @@ -0,0 +1,22 @@ +"functions": +- "exceptions": [] + "name": "igraph_sparsemat_arpack_rssolve" + "params": + - "name": "A" + "type": "bool " + - "name": "options" + "type": "bool " + - "name": "storage" + "type": "bool " + - "name": "values" + "type": "bool " + - "name": "vectors" + "type": "bool " + - "name": "solvemethod" + "type": "int" + "return_type": "int" + "signature": "igraph_error_t igraph_sparsemat_arpack_rssolve(const igraph_sparsemat_t *, igraph_arpack_options_t *, igraph_arpack_storage_t *, igraph_vector_t *, igraph_matrix_t *, igraph_sparsemat_solve_t)" +"language": "c" +"project": "igraph" +"target_name": "read_pajek" +"target_path": "/src/igraph/fuzzing/read_pajek.cpp" diff --git a/benchmark-sets/headerfiles/kamailio.yaml b/benchmark-sets/headerfiles/kamailio.yaml new file mode 100644 index 0000000000..9fd5cb9567 --- /dev/null +++ b/benchmark-sets/headerfiles/kamailio.yaml @@ -0,0 +1,26 @@ +"functions": +- "exceptions": [] + "name": "tcp_init_children" + "params": + - "name": "woneinit" + "type": "bool " + "return_type": "int" + "signature": "int tcp_init_children(int *)" +- "exceptions": [] + "name": "tcp_receive_loop" + "params": + - "name": "unix_sock" + "type": "int" + "return_type": "void" + "signature": "void tcp_receive_loop(int)" +- "exceptions": [] + "name": "fix_actions" + "params": + - "name": "a" + "type": "bool " + "return_type": "int" + "signature": "int fix_actions(struct action *)" +"language": "c" +"project": "kamailio" +"target_name": "fuzz_uri" +"target_path": "/src/kamailio/misc/fuzz/fuzz_uri.c" diff --git a/benchmark-sets/headerfiles/krb5.yaml b/benchmark-sets/headerfiles/krb5.yaml new file mode 100644 index 0000000000..183b747d1d --- /dev/null +++ b/benchmark-sets/headerfiles/krb5.yaml @@ -0,0 +1,130 @@ +"functions": +- "exceptions": [] + "name": "krb5_gss_store_cred_into" + "params": + - "name": "minor_status" + "type": "bool " + - "name": "input_cred_handle" + "type": "bool " + - "name": "cred_usage" + "type": "int" + - "name": "desired_mech" + "type": "bool " + - "name": "overwrite_cred" + "type": "int" + - "name": "default_cred" + "type": "int" + - "name": "cred_store" + "type": "bool " + - "name": "elements_stored" + "type": "bool " + - "name": "cred_usage_stored" + "type": "bool " + "return_type": "int" + "signature": "OM_uint32 krb5_gss_store_cred_into(OM_uint32 *, gss_cred_id_t, gss_cred_usage_t, const gss_OID, OM_uint32, OM_uint32, gss_const_key_value_set_t, gss_OID_set *, gss_cred_usage_t *)" +- "exceptions": [] + "name": "iakerb_gss_accept_sec_context" + "params": + - "name": "minor_status" + "type": "bool " + - "name": "context_handle" + "type": "bool " + - "name": "verifier_cred_handle" + "type": "bool " + - "name": "input_token" + "type": "bool " + - "name": "input_chan_bindings" + "type": "bool " + - "name": "src_name" + "type": "bool " + - "name": "mech_type" + "type": "bool " + - "name": "output_token" + "type": "bool " + - "name": "ret_flags" + "type": "bool " + - "name": "time_rec" + "type": "bool " + - "name": "delegated_cred_handle" + "type": "bool " + "return_type": "int" + "signature": "OM_uint32 iakerb_gss_accept_sec_context(OM_uint32 *, gss_ctx_id_t *, gss_cred_id_t, gss_buffer_t, gss_channel_bindings_t, gss_name_t *, gss_OID *, gss_buffer_t, OM_uint32 *, OM_uint32 *, gss_cred_id_t *)" +- "exceptions": [] + "name": "krb5_gss_store_cred" + "params": + - "name": "minor_status" + "type": "bool " + - "name": "input_cred_handle" + "type": "bool " + - "name": "cred_usage" + "type": "int" + - "name": "desired_mech" + "type": "bool " + - "name": "overwrite_cred" + "type": "int" + - "name": "default_cred" + "type": "int" + - "name": "elements_stored" + "type": "bool " + - "name": "cred_usage_stored" + "type": "bool " + "return_type": "int" + "signature": "OM_uint32 krb5_gss_store_cred(OM_uint32 *, gss_cred_id_t, gss_cred_usage_t, const gss_OID, OM_uint32, OM_uint32, gss_OID_set *, gss_cred_usage_t *)" +- "exceptions": [] + "name": "krb5_gss_acquire_cred_impersonate_name" + "params": + - "name": "minor_status" + "type": "bool " + - "name": "impersonator_cred_handle" + "type": "bool " + - "name": "desired_name" + "type": "bool " + - "name": "time_req" + "type": "int" + - "name": "desired_mechs" + "type": "bool " + - "name": "cred_usage" + "type": "int" + - "name": "output_cred_handle" + "type": "bool " + - "name": "actual_mechs" + "type": "bool " + - "name": "time_rec" + "type": "bool " + "return_type": "int" + "signature": "OM_uint32 krb5_gss_acquire_cred_impersonate_name(OM_uint32 *, const gss_cred_id_t, const gss_name_t, OM_uint32, const gss_OID_set, gss_cred_usage_t, gss_cred_id_t *, gss_OID_set *, OM_uint32 *)" +- "exceptions": [] + "name": "iakerb_gss_init_sec_context" + "params": + - "name": "minor_status" + "type": "bool " + - "name": "claimant_cred_handle" + "type": "bool " + - "name": "context_handle" + "type": "bool " + - "name": "target_name" + "type": "bool " + - "name": "mech_type" + "type": "bool " + - "name": "req_flags" + "type": "int" + - "name": "time_req" + "type": "int" + - "name": "input_chan_bindings" + "type": "bool " + - "name": "input_token" + "type": "bool " + - "name": "actual_mech_type" + "type": "bool " + - "name": "output_token" + "type": "bool " + - "name": "ret_flags" + "type": "bool " + - "name": "time_rec" + "type": "bool " + "return_type": "int" + "signature": "OM_uint32 iakerb_gss_init_sec_context(OM_uint32 *, gss_cred_id_t, gss_ctx_id_t *, gss_name_t, gss_OID, OM_uint32, OM_uint32, gss_channel_bindings_t, gss_buffer_t, gss_OID *, gss_buffer_t, OM_uint32 *, OM_uint32 *)" +"language": "c" +"project": "krb5" +"target_name": "fuzz_json" +"target_path": "/src/krb5/src/tests/fuzzing/fuzz_json.c" diff --git a/benchmark-sets/headerfiles/lcms.yaml b/benchmark-sets/headerfiles/lcms.yaml new file mode 100644 index 0000000000..f707a4f169 --- /dev/null +++ b/benchmark-sets/headerfiles/lcms.yaml @@ -0,0 +1,84 @@ +"functions": +- "exceptions": [] + "name": "cmsCreateDeviceLinkFromCubeFileTHR" + "params": + - "name": "ContextID" + "type": "bool " + - "name": "cFileName" + "type": "bool " + "return_type": "void" + "signature": "cmsHPROFILE cmsCreateDeviceLinkFromCubeFileTHR(cmsContext, const char *)" +- "exceptions": [] + "name": "cmsCreateProofingTransform" + "params": + - "name": "InputProfile" + "type": "bool " + - "name": "InputFormat" + "type": "int" + - "name": "OutputProfile" + "type": "bool " + - "name": "OutputFormat" + "type": "int" + - "name": "ProofingProfile" + "type": "bool " + - "name": "nIntent" + "type": "int" + - "name": "ProofingIntent" + "type": "int" + - "name": "dwFlags" + "type": "int" + "return_type": "void" + "signature": "cmsHTRANSFORM cmsCreateProofingTransform(cmsHPROFILE, cmsUInt32Number, cmsHPROFILE, cmsUInt32Number, cmsHPROFILE, cmsUInt32Number, cmsUInt32Number, cmsUInt32Number)" +- "exceptions": [] + "name": "cmsCreateDeviceLinkFromCubeFile" + "params": + - "name": "cFileName" + "type": "bool " + "return_type": "void" + "signature": "cmsHPROFILE cmsCreateDeviceLinkFromCubeFile(const char *)" +- "exceptions": [] + "name": "_cmsDefaultICCintents" + "params": + - "name": "ContextID" + "type": "bool " + - "name": "nProfiles" + "type": "int" + - "name": "TheIntents" + "type": "bool " + - "name": "hProfiles" + "type": "bool " + - "name": "BPC" + "type": "bool " + - "name": "AdaptationStates" + "type": "bool " + - "name": "dwFlags" + "type": "int" + "return_type": "void" + "signature": "cmsPipeline * _cmsDefaultICCintents(cmsContext, cmsUInt32Number, cmsUInt32Number *, cmsHPROFILE *, cmsBool *, cmsFloat64Number *, cmsUInt32Number)" +- "exceptions": [] + "name": "cmsCreateProofingTransformTHR" + "params": + - "name": "ContextID" + "type": "bool " + - "name": "InputProfile" + "type": "bool " + - "name": "InputFormat" + "type": "int" + - "name": "OutputProfile" + "type": "bool " + - "name": "OutputFormat" + "type": "int" + - "name": "ProofingProfile" + "type": "bool " + - "name": "nIntent" + "type": "int" + - "name": "ProofingIntent" + "type": "int" + - "name": "dwFlags" + "type": "int" + "return_type": "void" + "signature": "cmsHTRANSFORM cmsCreateProofingTransformTHR(cmsContext, cmsHPROFILE, cmsUInt32Number, cmsHPROFILE, cmsUInt32Number, cmsHPROFILE, cmsUInt32Number, cmsUInt32Number, cmsUInt32Number)" +"language": "c" +"project": "lcms" +"target_name": "cms_cie_cam02_fuzzer" +"target_path": "/src/cms_cie_cam02_fuzzer.c" diff --git a/benchmark-sets/headerfiles/libbpf.yaml b/benchmark-sets/headerfiles/libbpf.yaml new file mode 100644 index 0000000000..4be20ce6cf --- /dev/null +++ b/benchmark-sets/headerfiles/libbpf.yaml @@ -0,0 +1,44 @@ +"functions": +- "exceptions": [] + "name": "bpf_object__load" + "params": + - "name": "obj" + "type": "bool " + "return_type": "int" + "signature": "int bpf_object__load(struct bpf_object *)" +- "exceptions": [] + "name": "bpf_object__open" + "params": + - "name": "path" + "type": "bool " + "return_type": "void" + "signature": "struct bpf_object * bpf_object__open(const char *)" +- "exceptions": [] + "name": "bpf_object__load_skeleton" + "params": + - "name": "s" + "type": "bool " + "return_type": "int" + "signature": "int bpf_object__load_skeleton(struct bpf_object_skeleton *)" +- "exceptions": [] + "name": "bpf_object__open_skeleton" + "params": + - "name": "s" + "type": "bool " + - "name": "opts" + "type": "bool " + "return_type": "int" + "signature": "int bpf_object__open_skeleton(struct bpf_object_skeleton *, const struct bpf_object_open_opts *)" +- "exceptions": [] + "name": "bpf_object__open_file" + "params": + - "name": "path" + "type": "bool " + - "name": "opts" + "type": "bool " + "return_type": "void" + "signature": "struct bpf_object * bpf_object__open_file(const char *, const struct bpf_object_open_opts *)" +"language": "c" +"project": "libbpf" +"target_name": "bpf-object-fuzzer" +"target_path": "/src/libbpf/fuzz/bpf-object-fuzzer.c" diff --git a/benchmark-sets/headerfiles/libcoap.yaml b/benchmark-sets/headerfiles/libcoap.yaml new file mode 100644 index 0000000000..b53ba9bc56 --- /dev/null +++ b/benchmark-sets/headerfiles/libcoap.yaml @@ -0,0 +1,84 @@ +"functions": +- "exceptions": [] + "name": "coap_ws_read" + "params": + - "name": "session" + "type": "bool " + - "name": "data" + "type": "bool " + - "name": "datalen" + "type": "size_t" + "return_type": "size_t" + "signature": "ssize_t coap_ws_read(coap_session_t *, uint8_t *, size_t)" +- "exceptions": [] + "name": "coap_new_client_session_oscore_pki" + "params": + - "name": "ctx" + "type": "bool " + - "name": "local_if" + "type": "bool " + - "name": "server" + "type": "bool " + - "name": "proto" + "type": "int" + - "name": "pki_data" + "type": "bool " + - "name": "oscore_conf" + "type": "bool " + "return_type": "void" + "signature": "coap_session_t * coap_new_client_session_oscore_pki(coap_context_t *, const coap_address_t *, const coap_address_t *, coap_proto_t, coap_dtls_pki_t *, coap_oscore_conf_t *)" +- "exceptions": [] + "name": "coap_new_client_session_oscore_pki_lkd" + "params": + - "name": "ctx" + "type": "bool " + - "name": "local_if" + "type": "bool " + - "name": "server" + "type": "bool " + - "name": "proto" + "type": "int" + - "name": "pki_data" + "type": "bool " + - "name": "oscore_conf" + "type": "bool " + "return_type": "void" + "signature": "coap_session_t * coap_new_client_session_oscore_pki_lkd(coap_context_t *, const coap_address_t *, const coap_address_t *, coap_proto_t, coap_dtls_pki_t *, coap_oscore_conf_t *)" +- "exceptions": [] + "name": "coap_new_client_session_oscore_psk_lkd" + "params": + - "name": "ctx" + "type": "bool " + - "name": "local_if" + "type": "bool " + - "name": "server" + "type": "bool " + - "name": "proto" + "type": "int" + - "name": "psk_data" + "type": "bool " + - "name": "oscore_conf" + "type": "bool " + "return_type": "void" + "signature": "coap_session_t * coap_new_client_session_oscore_psk_lkd(coap_context_t *, const coap_address_t *, const coap_address_t *, coap_proto_t, coap_dtls_cpsk_t *, coap_oscore_conf_t *)" +- "exceptions": [] + "name": "coap_new_client_session_oscore_psk" + "params": + - "name": "ctx" + "type": "bool " + - "name": "local_if" + "type": "bool " + - "name": "server" + "type": "bool " + - "name": "proto" + "type": "int" + - "name": "psk_data" + "type": "bool " + - "name": "oscore_conf" + "type": "bool " + "return_type": "void" + "signature": "coap_session_t * coap_new_client_session_oscore_psk(coap_context_t *, const coap_address_t *, const coap_address_t *, coap_proto_t, coap_dtls_cpsk_t *, coap_oscore_conf_t *)" +"language": "c" +"project": "libcoap" +"target_name": "pdu_parse_udp_fuzzer" +"target_path": "/src/libcoap/tests/oss-fuzz/pdu_parse_udp_target.c" diff --git a/benchmark-sets/headerfiles/libevent.yaml b/benchmark-sets/headerfiles/libevent.yaml new file mode 100644 index 0000000000..73cb9dd9ba --- /dev/null +++ b/benchmark-sets/headerfiles/libevent.yaml @@ -0,0 +1,54 @@ +"functions": +- "exceptions": [] + "name": "evhttp_accept_socket" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "int" + "return_type": "int" + "signature": "int evhttp_accept_socket(struct evhttp *, int)" +- "exceptions": [] + "name": "evhttp_bind_socket_with_handle" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "bool " + - "name": "" + "type": "short" + "return_type": "void" + "signature": "struct evhttp_bound_socket * evhttp_bind_socket_with_handle(struct evhttp *, const char *, uint16_t)" +- "exceptions": [] + "name": "evhttp_accept_socket_with_handle" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "int" + "return_type": "void" + "signature": "struct evhttp_bound_socket * evhttp_accept_socket_with_handle(struct evhttp *, int)" +- "exceptions": [] + "name": "evhttp_start" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "short" + "return_type": "void" + "signature": "struct evhttp * evhttp_start(const char *, uint16_t)" +- "exceptions": [] + "name": "evhttp_bind_socket" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "bool " + - "name": "" + "type": "short" + "return_type": "int" + "signature": "int evhttp_bind_socket(struct evhttp *, const char *, uint16_t)" +"language": "c++" +"project": "libevent" +"target_name": "dns_config_fuzzer" +"target_path": "/src/dns_config_fuzzer.cc" diff --git a/benchmark-sets/headerfiles/libfido2.yaml b/benchmark-sets/headerfiles/libfido2.yaml new file mode 100644 index 0000000000..fb4221c3ce --- /dev/null +++ b/benchmark-sets/headerfiles/libfido2.yaml @@ -0,0 +1,46 @@ +"functions": +- "exceptions": [] + "name": "mutate" + "params": + - "name": "p" + "type": "bool " + - "name": "seed" + "type": "int" + - "name": "flags" + "type": "int" + "return_type": "void" + "signature": "void mutate(struct param *, unsigned int, unsigned int)" +- "exceptions": [] + "name": "mutate_blob" + "params": + - "name": "blob" + "type": "bool " + "return_type": "void" + "signature": "void mutate_blob(struct blob *)" +- "exceptions": [] + "name": "pack_dummy" + "params": + - "name": "ptr" + "type": "bool " + - "name": "len" + "type": "size_t" + "return_type": "size_t" + "signature": "size_t pack_dummy(uint8_t *, size_t)" +- "exceptions": [] + "name": "mutate_string" + "params": + - "name": "s" + "type": "bool " + "return_type": "void" + "signature": "void mutate_string(char *)" +- "exceptions": [] + "name": "mutate_int" + "params": + - "name": "i" + "type": "bool " + "return_type": "void" + "signature": "void mutate_int(int *)" +"language": "c" +"project": "libfido2" +"target_name": "fuzz_netlink" +"target_path": "/src/libfido2/fuzz/libfuzzer.c" diff --git a/benchmark-sets/headerfiles/libical.yaml b/benchmark-sets/headerfiles/libical.yaml new file mode 100644 index 0000000000..695c1876a7 --- /dev/null +++ b/benchmark-sets/headerfiles/libical.yaml @@ -0,0 +1,60 @@ +"functions": +- "exceptions": [] + "name": "icalcomponent_foreach_recurrence" + "params": + - "name": "comp" + "type": "bool " + - "name": "start" + "type": "bool " + - "name": "end" + "type": "bool " + - "name": "callback" + "type": "bool " + - "name": "callback_data" + "type": "bool " + "return_type": "void" + "signature": "void icalcomponent_foreach_recurrence(icalcomponent *, struct icaltimetype, struct icaltimetype, DW_TAG_subroutine_typeInfinite loop *, void *)" +- "exceptions": [] + "name": "icalcomponent_set_due" + "params": + - "name": "comp" + "type": "bool " + - "name": "v" + "type": "bool " + "return_type": "void" + "signature": "void icalcomponent_set_due(icalcomponent *, struct icaltimetype)" +- "exceptions": [] + "name": "icaltimezone_truncate_vtimezone" + "params": + - "name": "vtz" + "type": "bool " + - "name": "start" + "type": "bool " + - "name": "end" + "type": "bool " + - "name": "ms_compatible" + "type": "int" + "return_type": "void" + "signature": "void icaltimezone_truncate_vtimezone(icalcomponent *, icaltimetype, icaltimetype, int)" +- "exceptions": [] + "name": "icalcomponent_merge_component" + "params": + - "name": "comp" + "type": "bool " + - "name": "comp_to_merge" + "type": "bool " + "return_type": "void" + "signature": "void icalcomponent_merge_component(icalcomponent *, icalcomponent *)" +- "exceptions": [] + "name": "icalcomponent_get_span" + "params": + - "name": "comp" + "type": "bool " + - "name": "" + "type": "bool " + "return_type": "void" + "signature": "struct icaltime_span icalcomponent_get_span(icalcomponent *)" +"language": "c++" +"project": "libical" +"target_name": "libical_extended_fuzzer" +"target_path": "/src/libical_extended_fuzzer.cc" diff --git a/benchmark-sets/headerfiles/libjpeg-turbo.yaml b/benchmark-sets/headerfiles/libjpeg-turbo.yaml new file mode 100644 index 0000000000..2cdb86cffc --- /dev/null +++ b/benchmark-sets/headerfiles/libjpeg-turbo.yaml @@ -0,0 +1,112 @@ +"functions": +- "exceptions": [] + "name": "tjEncodeYUV" + "params": + - "name": "handle" + "type": "bool " + - "name": "srcBuf" + "type": "bool " + - "name": "width" + "type": "int" + - "name": "pitch" + "type": "int" + - "name": "height" + "type": "int" + - "name": "pixelSize" + "type": "int" + - "name": "dstBuf" + "type": "bool " + - "name": "subsamp" + "type": "int" + - "name": "flags" + "type": "int" + "return_type": "int" + "signature": "int tjEncodeYUV(tjhandle, unsigned char *, int, int, int, int, unsigned char *, int, int)" +- "exceptions": [] + "name": "tjCompress" + "params": + - "name": "handle" + "type": "bool " + - "name": "srcBuf" + "type": "bool " + - "name": "width" + "type": "int" + - "name": "pitch" + "type": "int" + - "name": "height" + "type": "int" + - "name": "pixelSize" + "type": "int" + - "name": "jpegBuf" + "type": "bool " + - "name": "jpegSize" + "type": "bool " + - "name": "jpegSubsamp" + "type": "int" + - "name": "jpegQual" + "type": "int" + - "name": "flags" + "type": "int" + "return_type": "int" + "signature": "int tjCompress(tjhandle, unsigned char *, int, int, int, int, unsigned char *, unsigned long *, int, int, int)" +- "exceptions": [] + "name": "tjDecompressToYUV" + "params": + - "name": "handle" + "type": "bool " + - "name": "jpegBuf" + "type": "bool " + - "name": "jpegSize" + "type": "size_t" + - "name": "dstBuf" + "type": "bool " + - "name": "flags" + "type": "int" + "return_type": "int" + "signature": "int tjDecompressToYUV(tjhandle, unsigned char *, unsigned long, unsigned char *, int)" +- "exceptions": [] + "name": "tj3SaveImage16" + "params": + - "name": "handle" + "type": "bool " + - "name": "filename" + "type": "bool " + - "name": "buffer" + "type": "bool " + - "name": "width" + "type": "int" + - "name": "pitch" + "type": "int" + - "name": "height" + "type": "int" + - "name": "pixelFormat" + "type": "int" + "return_type": "int" + "signature": "int tj3SaveImage16(tjhandle, const char *, const J16SAMPLE *, int, int, int, int)" +- "exceptions": [] + "name": "tjDecompress" + "params": + - "name": "handle" + "type": "bool " + - "name": "jpegBuf" + "type": "bool " + - "name": "jpegSize" + "type": "size_t" + - "name": "dstBuf" + "type": "bool " + - "name": "width" + "type": "int" + - "name": "pitch" + "type": "int" + - "name": "height" + "type": "int" + - "name": "pixelSize" + "type": "int" + - "name": "flags" + "type": "int" + "return_type": "int" + "signature": "int tjDecompress(tjhandle, unsigned char *, unsigned long, unsigned char *, int, int, int, int, int)" +"language": "c++" +"project": "libjpeg-turbo" +"target_name": "compress_lossless_fuzzer_dev" +"target_path": "/src/libjpeg-turbo.dev/fuzz/compress_lossless.cc" diff --git a/benchmark-sets/headerfiles/libpcap.yaml b/benchmark-sets/headerfiles/libpcap.yaml new file mode 100644 index 0000000000..523c45085b --- /dev/null +++ b/benchmark-sets/headerfiles/libpcap.yaml @@ -0,0 +1,68 @@ +"functions": +- "exceptions": [] + "name": "pcap_findalldevs_ex" + "params": + - "name": "source" + "type": "bool " + - "name": "auth" + "type": "bool " + - "name": "alldevs" + "type": "bool " + - "name": "errbuf" + "type": "bool " + "return_type": "int" + "signature": "int pcap_findalldevs_ex(const char *, struct pcap_rmtauth *, pcap_if_t **, char *)" +- "exceptions": [] + "name": "pcap_compile_nopcap" + "params": + - "name": "snaplen_arg" + "type": "int" + - "name": "linktype_arg" + "type": "int" + - "name": "program" + "type": "bool " + - "name": "buf" + "type": "bool " + - "name": "optimize" + "type": "int" + - "name": "mask" + "type": "int" + "return_type": "int" + "signature": "int pcap_compile_nopcap(int, int, struct bpf_program *, const char *, int, bpf_u_int32)" +- "exceptions": [] + "name": "pcap_open" + "params": + - "name": "source" + "type": "bool " + - "name": "snaplen" + "type": "int" + - "name": "flags" + "type": "int" + - "name": "read_timeout" + "type": "int" + - "name": "auth" + "type": "bool " + - "name": "errbuf" + "type": "bool " + "return_type": "void" + "signature": "pcap_t * pcap_open(const char *, int, int, int, struct pcap_rmtauth *, char *)" +- "exceptions": [] + "name": "pcap_findalldevs" + "params": + - "name": "alldevsp" + "type": "bool " + - "name": "errbuf" + "type": "bool " + "return_type": "int" + "signature": "int pcap_findalldevs(pcap_if_t **, char *)" +- "exceptions": [] + "name": "pcap_lookupdev" + "params": + - "name": "errbuf" + "type": "bool " + "return_type": "void" + "signature": "char * pcap_lookupdev(char *)" +"language": "c" +"project": "libpcap" +"target_name": "fuzz_rserver" +"target_path": "/src/libpcap/testprogs/fuzz/fuzz_rserver.c" diff --git a/benchmark-sets/headerfiles/librdkafka.yaml b/benchmark-sets/headerfiles/librdkafka.yaml new file mode 100644 index 0000000000..f2c612be48 --- /dev/null +++ b/benchmark-sets/headerfiles/librdkafka.yaml @@ -0,0 +1,18 @@ +"functions": +- "exceptions": [] + "name": "re_regexec" + "params": + - "name": "prog" + "type": "bool " + - "name": "sp" + "type": "bool " + - "name": "sub" + "type": "bool " + - "name": "eflags" + "type": "int" + "return_type": "int" + "signature": "int re_regexec(Reprog *, const char *, Resub *, int)" +"language": "c" +"project": "librdkafka" +"target_name": "fuzz_regex" +"target_path": "/src/librdkafka/tests/fuzzers/fuzz_regex.c" diff --git a/benchmark-sets/headerfiles/libsndfile.yaml b/benchmark-sets/headerfiles/libsndfile.yaml new file mode 100644 index 0000000000..3eedfa956d --- /dev/null +++ b/benchmark-sets/headerfiles/libsndfile.yaml @@ -0,0 +1,62 @@ +"functions": +- "exceptions": [] + "name": "sf_open" + "params": + - "name": "path" + "type": "bool " + - "name": "mode" + "type": "int" + - "name": "sfinfo" + "type": "bool " + "return_type": "void" + "signature": "SNDFILE * sf_open(const char *, int, SF_INFO *)" +- "exceptions": [] + "name": "sf_command" + "params": + - "name": "sndfile" + "type": "bool " + - "name": "command" + "type": "int" + - "name": "data" + "type": "bool " + - "name": "datasize" + "type": "int" + "return_type": "int" + "signature": "int sf_command(SNDFILE *, int, void *, int)" +- "exceptions": [] + "name": "sf_open_fd" + "params": + - "name": "fd" + "type": "int" + - "name": "mode" + "type": "int" + - "name": "sfinfo" + "type": "bool " + - "name": "close_desc" + "type": "int" + "return_type": "void" + "signature": "SNDFILE * sf_open_fd(int, int, SF_INFO *, int)" +- "exceptions": [] + "name": "sf_get_chunk_iterator" + "params": + - "name": "sndfile" + "type": "bool " + - "name": "chunk_info" + "type": "bool " + "return_type": "void" + "signature": "SF_CHUNK_ITERATOR * sf_get_chunk_iterator(SNDFILE *, const SF_CHUNK_INFO *)" +- "exceptions": [] + "name": "sf_set_string" + "params": + - "name": "sndfile" + "type": "bool " + - "name": "str_type" + "type": "int" + - "name": "str" + "type": "bool " + "return_type": "int" + "signature": "int sf_set_string(SNDFILE *, int, const char *)" +"language": "c++" +"project": "libsndfile" +"target_name": "sndfile_fuzzer" +"target_path": "/src/libsndfile/ossfuzz/sndfile_fuzzer.cc" diff --git a/benchmark-sets/headerfiles/libsodium.yaml b/benchmark-sets/headerfiles/libsodium.yaml new file mode 100644 index 0000000000..3d3815c7eb --- /dev/null +++ b/benchmark-sets/headerfiles/libsodium.yaml @@ -0,0 +1,50 @@ +"functions": +- "exceptions": [] + "name": "blake2b_compress_sse41" + "params": + - "name": "S" + "type": "bool " + - "name": "block" + "type": "bool " + "return_type": "int" + "signature": "int blake2b_compress_sse41(blake2b_state *, const uint8_t *)" +- "exceptions": [] + "name": "argon2_initialize" + "params": + - "name": "instance" + "type": "bool " + - "name": "context" + "type": "bool " + "return_type": "int" + "signature": "int argon2_initialize(argon2_instance_t *, argon2_context *)" +- "exceptions": [] + "name": "blake2b_compress_avx2" + "params": + - "name": "S" + "type": "bool " + - "name": "block" + "type": "bool " + "return_type": "int" + "signature": "int blake2b_compress_avx2(blake2b_state *, const uint8_t *)" +- "exceptions": [] + "name": "argon2_finalize" + "params": + - "name": "context" + "type": "bool " + - "name": "instance" + "type": "bool " + "return_type": "void" + "signature": "void argon2_finalize(const argon2_context *, argon2_instance_t *)" +- "exceptions": [] + "name": "ge25519_from_hash" + "params": + - "name": "s" + "type": "bool " + - "name": "h" + "type": "bool " + "return_type": "void" + "signature": "void ge25519_from_hash(unsigned char *, const unsigned char *)" +"language": "c++" +"project": "libsodium" +"target_name": "secret_key_auth_fuzzer" +"target_path": "/src/secret_key_auth_fuzzer.cc" diff --git a/benchmark-sets/headerfiles/libssh.yaml b/benchmark-sets/headerfiles/libssh.yaml new file mode 100644 index 0000000000..ff71980580 --- /dev/null +++ b/benchmark-sets/headerfiles/libssh.yaml @@ -0,0 +1,56 @@ +"functions": +- "exceptions": [] + "name": "ssh_userauth_agent_pubkey" + "params": + - "name": "session" + "type": "bool " + - "name": "username" + "type": "bool " + - "name": "publickey" + "type": "bool " + "return_type": "int" + "signature": "int ssh_userauth_agent_pubkey(ssh_session, const char *, ssh_public_key)" +- "exceptions": [] + "name": "ssh_agent_get_first_ident" + "params": + - "name": "session" + "type": "bool " + - "name": "comment" + "type": "bool " + "return_type": "void" + "signature": "ssh_key ssh_agent_get_first_ident(struct ssh_session_struct *, char **)" +- "exceptions": [] + "name": "ssh_userauth_publickey" + "params": + - "name": "session" + "type": "bool " + - "name": "username" + "type": "bool " + - "name": "privkey" + "type": "bool " + "return_type": "int" + "signature": "int ssh_userauth_publickey(ssh_session, const char *, const ssh_key)" +- "exceptions": [] + "name": "ssh_userauth_agent" + "params": + - "name": "session" + "type": "bool " + - "name": "username" + "type": "bool " + "return_type": "int" + "signature": "int ssh_userauth_agent(ssh_session, const char *)" +- "exceptions": [] + "name": "ssh_userauth_publickey_auto" + "params": + - "name": "session" + "type": "bool " + - "name": "username" + "type": "bool " + - "name": "passphrase" + "type": "bool " + "return_type": "int" + "signature": "int ssh_userauth_publickey_auto(ssh_session, const char *, const char *)" +"language": "c" +"project": "libssh" +"target_name": "ssh_pubkey_fuzzer" +"target_path": "/src/libssh/tests/fuzz/ssh_pubkey_fuzzer.c" diff --git a/benchmark-sets/headerfiles/libssh2.yaml b/benchmark-sets/headerfiles/libssh2.yaml new file mode 100644 index 0000000000..24617b13c4 --- /dev/null +++ b/benchmark-sets/headerfiles/libssh2.yaml @@ -0,0 +1,62 @@ +"functions": +- "exceptions": [] + "name": "libssh2_session_startup" + "params": + - "name": "session" + "type": "bool " + - "name": "sock" + "type": "int" + "return_type": "int" + "signature": "int libssh2_session_startup(LIBSSH2_SESSION *, int)" +- "exceptions": [] + "name": "libssh2_channel_forward_cancel" + "params": + - "name": "listener" + "type": "bool " + "return_type": "int" + "signature": "int libssh2_channel_forward_cancel(LIBSSH2_LISTENER *)" +- "exceptions": [] + "name": "libssh2_channel_read_ex" + "params": + - "name": "channel" + "type": "bool " + - "name": "stream_id" + "type": "int" + - "name": "buf" + "type": "bool " + - "name": "buflen" + "type": "size_t" + "return_type": "size_t" + "signature": "ssize_t libssh2_channel_read_ex(LIBSSH2_CHANNEL *, int, char *, size_t)" +- "exceptions": [] + "name": "libssh2_channel_direct_tcpip_ex" + "params": + - "name": "session" + "type": "bool " + - "name": "host" + "type": "bool " + - "name": "port" + "type": "int" + - "name": "shost" + "type": "bool " + - "name": "sport" + "type": "int" + "return_type": "void" + "signature": "LIBSSH2_CHANNEL * libssh2_channel_direct_tcpip_ex(LIBSSH2_SESSION *, const char *, int, const char *, int)" +- "exceptions": [] + "name": "libssh2_channel_direct_streamlocal_ex" + "params": + - "name": "session" + "type": "bool " + - "name": "socket_path" + "type": "bool " + - "name": "shost" + "type": "bool " + - "name": "sport" + "type": "int" + "return_type": "void" + "signature": "LIBSSH2_CHANNEL * libssh2_channel_direct_streamlocal_ex(LIBSSH2_SESSION *, const char *, const char *, int)" +"language": "c++" +"project": "libssh2" +"target_name": "ssh2_client_fuzzer" +"target_path": "/src/libssh2/tests/ossfuzz/ssh2_client_fuzzer.cc" diff --git a/benchmark-sets/headerfiles/libtpms.yaml b/benchmark-sets/headerfiles/libtpms.yaml new file mode 100644 index 0000000000..00a5545f94 --- /dev/null +++ b/benchmark-sets/headerfiles/libtpms.yaml @@ -0,0 +1,71 @@ +"functions": +- "exceptions": [] + "name": "TPM_Process_SetCapability" + "params": + - "name": "tpm_state" + "type": "bool " + - "name": "response" + "type": "bool " + - "name": "tag" + "type": "short" + - "name": "paramSize" + "type": "int" + - "name": "ordinal" + "type": "int" + - "name": "command" + "type": "bool " + - "name": "transportInternal" + "type": "bool " + "return_type": "int" + "signature": "TPM_RESULT TPM_Process_SetCapability(tpm_state_t *, TPM_STORE_BUFFER *, TPM_TAG, uint32_t, TPM_COMMAND_CODE, unsigned char *, TPM_TRANSPORT_INTERNAL *)" +- "exceptions": [] + "name": "TPM2_Create" + "params": + - "name": "in" + "type": "bool " + - "name": "out" + "type": "bool " + "return_type": "int" + "signature": "TPM_RC TPM2_Create(Create_In *, Create_Out *)" +- "exceptions": [] + "name": "TPM_Process_GetCapabilitySigned" + "params": + - "name": "tpm_state" + "type": "bool " + - "name": "response" + "type": "bool " + - "name": "tag" + "type": "short" + - "name": "paramSize" + "type": "int" + - "name": "ordinal" + "type": "int" + - "name": "command" + "type": "bool " + - "name": "transportInternal" + "type": "bool " + "return_type": "int" + "signature": "TPM_RESULT TPM_Process_GetCapabilitySigned(tpm_state_t *, TPM_STORE_BUFFER *, TPM_TAG, uint32_t, TPM_COMMAND_CODE, unsigned char *, TPM_TRANSPORT_INTERNAL *)" +- "exceptions": [] + "name": "TPM_Process_GetCapability" + "params": + - "name": "tpm_state" + "type": "bool " + - "name": "response" + "type": "bool " + - "name": "tag" + "type": "short" + - "name": "paramSize" + "type": "int" + - "name": "ordinal" + "type": "int" + - "name": "command" + "type": "bool " + - "name": "transportInternal" + "type": "bool " + "return_type": "int" + "signature": "TPM_RESULT TPM_Process_GetCapability(tpm_state_t *, TPM_STORE_BUFFER *, TPM_TAG, uint32_t, TPM_COMMAND_CODE, unsigned char *, TPM_TRANSPORT_INTERNAL *)" +"language": "c" +"project": "libtpms" +"target_name": "fuzz-main" +"target_path": "/src/libtpms/tests/fuzz-main.c" diff --git a/benchmark-sets/headerfiles/libusb.yaml b/benchmark-sets/headerfiles/libusb.yaml new file mode 100644 index 0000000000..4136b63a73 --- /dev/null +++ b/benchmark-sets/headerfiles/libusb.yaml @@ -0,0 +1,74 @@ +"functions": +- "exceptions": [] + "name": "libusb_interrupt_transfer" + "params": + - "name": "dev_handle" + "type": "bool " + - "name": "endpoint" + "type": "char" + - "name": "data" + "type": "bool " + - "name": "length" + "type": "int" + - "name": "transferred" + "type": "bool " + - "name": "timeout" + "type": "int" + "return_type": "int" + "signature": "int libusb_interrupt_transfer(libusb_device_handle *, unsigned char, unsigned char *, int, int *, unsigned int)" +- "exceptions": [] + "name": "libusb_control_transfer" + "params": + - "name": "dev_handle" + "type": "bool " + - "name": "bmRequestType" + "type": "char" + - "name": "bRequest" + "type": "char" + - "name": "wValue" + "type": "short" + - "name": "wIndex" + "type": "short" + - "name": "data" + "type": "bool " + - "name": "wLength" + "type": "short" + - "name": "timeout" + "type": "int" + "return_type": "int" + "signature": "int libusb_control_transfer(libusb_device_handle *, uint8_t, uint8_t, uint16_t, uint16_t, unsigned char *, uint16_t, unsigned int)" +- "exceptions": [] + "name": "libusb_get_string_descriptor_ascii" + "params": + - "name": "dev_handle" + "type": "bool " + - "name": "desc_index" + "type": "char" + - "name": "data" + "type": "bool " + - "name": "length" + "type": "int" + "return_type": "int" + "signature": "int libusb_get_string_descriptor_ascii(libusb_device_handle *, uint8_t, unsigned char *, int)" +- "exceptions": [] + "name": "libusb_get_bos_descriptor" + "params": + - "name": "dev_handle" + "type": "bool " + - "name": "bos" + "type": "bool " + "return_type": "int" + "signature": "int libusb_get_bos_descriptor(libusb_device_handle *, struct libusb_bos_descriptor **)" +- "exceptions": [] + "name": "libusb_get_configuration" + "params": + - "name": "dev_handle" + "type": "bool " + - "name": "config" + "type": "bool " + "return_type": "int" + "signature": "int libusb_get_configuration(libusb_device_handle *, int *)" +"language": "c++" +"project": "libusb" +"target_name": "libusb_fuzzer" +"target_path": "/src/libusb_fuzzer.cc" diff --git a/benchmark-sets/headerfiles/libvnc.yaml b/benchmark-sets/headerfiles/libvnc.yaml new file mode 100644 index 0000000000..ad20b47e86 --- /dev/null +++ b/benchmark-sets/headerfiles/libvnc.yaml @@ -0,0 +1,50 @@ +"functions": +- "exceptions": [] + "name": "rfbStartOnHoldClient" + "params": + - "name": "cl" + "type": "bool " + "return_type": "void" + "signature": "void rfbStartOnHoldClient(rfbClientPtr)" +- "exceptions": [] + "name": "rfbReverseConnection" + "params": + - "name": "rfbScreen" + "type": "bool " + - "name": "host" + "type": "bool " + - "name": "port" + "type": "int" + "return_type": "void" + "signature": "rfbClientPtr rfbReverseConnection(rfbScreenInfoPtr, char *, int)" +- "exceptions": [] + "name": "rfbUpdateClient" + "params": + - "name": "cl" + "type": "bool " + "return_type": "char" + "signature": "rfbBool rfbUpdateClient(rfbClientPtr)" +- "exceptions": [] + "name": "rfbProcessEvents" + "params": + - "name": "screen" + "type": "bool " + - "name": "usec" + "type": "size_t" + "return_type": "char" + "signature": "rfbBool rfbProcessEvents(rfbScreenInfoPtr, long)" +- "exceptions": [] + "name": "rfbRunEventLoop" + "params": + - "name": "screen" + "type": "bool " + - "name": "usec" + "type": "size_t" + - "name": "runInBackground" + "type": "char" + "return_type": "void" + "signature": "void rfbRunEventLoop(rfbScreenInfoPtr, long, rfbBool)" +"language": "c" +"project": "libvnc" +"target_name": "fuzz_server" +"target_path": "/src/libvncserver/test/fuzz_server.c" diff --git a/benchmark-sets/headerfiles/libxls.yaml b/benchmark-sets/headerfiles/libxls.yaml new file mode 100644 index 0000000000..4b6768ee18 --- /dev/null +++ b/benchmark-sets/headerfiles/libxls.yaml @@ -0,0 +1,46 @@ +"functions": +- "exceptions": [] + "name": "xls_open" + "params": + - "name": "file" + "type": "bool " + - "name": "charset" + "type": "bool " + "return_type": "void" + "signature": "xlsWorkBook * xls_open(const char *, const char *)" +- "exceptions": [] + "name": "ole2_open_file" + "params": + - "name": "file" + "type": "bool " + "return_type": "void" + "signature": "OLE2 * ole2_open_file(const char *)" +- "exceptions": [] + "name": "xls_open_file" + "params": + - "name": "file" + "type": "bool " + - "name": "charset" + "type": "bool " + - "name": "outError" + "type": "bool " + "return_type": "void" + "signature": "xlsWorkBook * xls_open_file(const char *, const char *, xls_error_t *)" +- "exceptions": [] + "name": "xls_close_summaryInfo" + "params": + - "name": "pSI" + "type": "bool " + "return_type": "void" + "signature": "void xls_close_summaryInfo(xlsSummaryInfo *)" +- "exceptions": [] + "name": "xls_summaryInfo" + "params": + - "name": "pWB" + "type": "bool " + "return_type": "void" + "signature": "xlsSummaryInfo * xls_summaryInfo(xlsWorkBook *)" +"language": "c" +"project": "libxls" +"target_name": "fuzz_xls" +"target_path": "/src/libxls/fuzz/fuzz_xls.c" diff --git a/benchmark-sets/headerfiles/libyang.yaml b/benchmark-sets/headerfiles/libyang.yaml new file mode 100644 index 0000000000..67b12be1c0 --- /dev/null +++ b/benchmark-sets/headerfiles/libyang.yaml @@ -0,0 +1,76 @@ +"functions": +- "exceptions": [] + "name": "lyd_parse_op" + "params": + - "name": "ctx" + "type": "bool " + - "name": "parent" + "type": "bool " + - "name": "in" + "type": "bool " + - "name": "format" + "type": "int" + - "name": "data_type" + "type": "int" + - "name": "tree" + "type": "bool " + - "name": "op" + "type": "bool " + "return_type": "int" + "signature": "LY_ERR lyd_parse_op(const struct ly_ctx *, struct lyd_node *, struct ly_in *, LYD_FORMAT, DW_TAG_enumeration_typelyd_type, struct lyd_node **, struct lyd_node **)" +- "exceptions": [] + "name": "lyplg_ext_print_info_extension_instance" + "params": + - "name": "ctx" + "type": "bool " + - "name": "ext" + "type": "bool " + - "name": "flag" + "type": "bool " + "return_type": "void" + "signature": "void lyplg_ext_print_info_extension_instance(struct lyspr_ctx *, const struct lysc_ext_instance *, ly_bool *)" +- "exceptions": [] + "name": "yang_print_compiled" + "params": + - "name": "out" + "type": "bool " + - "name": "module" + "type": "bool " + - "name": "options" + "type": "int" + "return_type": "int" + "signature": "LY_ERR yang_print_compiled(struct ly_out *, const struct lys_module *, uint32_t)" +- "exceptions": [] + "name": "ly_ctx_get_yanglib_data" + "params": + - "name": "ctx" + "type": "bool " + - "name": "root_p" + "type": "bool " + - "name": "content_id_format" + "type": "bool " + "return_type": "int" + "signature": "LY_ERR ly_ctx_get_yanglib_data(const struct ly_ctx *, struct lyd_node **, const char *, void)" +- "exceptions": [] + "name": "lyd_parse_ext_op" + "params": + - "name": "ext" + "type": "bool " + - "name": "parent" + "type": "bool " + - "name": "in" + "type": "bool " + - "name": "format" + "type": "int" + - "name": "data_type" + "type": "int" + - "name": "tree" + "type": "bool " + - "name": "op" + "type": "bool " + "return_type": "int" + "signature": "LY_ERR lyd_parse_ext_op(const struct lysc_ext_instance *, struct lyd_node *, struct ly_in *, LYD_FORMAT, DW_TAG_enumeration_typelyd_type, struct lyd_node **, struct lyd_node **)" +"language": "c" +"project": "libyang" +"target_name": "lyd_parse_mem_json" +"target_path": "/src/libyang/tests/fuzz/lyd_parse_mem_json.c" diff --git a/benchmark-sets/headerfiles/lwan.yaml b/benchmark-sets/headerfiles/lwan.yaml new file mode 100644 index 0000000000..ab41584319 --- /dev/null +++ b/benchmark-sets/headerfiles/lwan.yaml @@ -0,0 +1,46 @@ +"functions": +- "exceptions": [] + "name": "lwan_response" + "params": + - "name": "request" + "type": "bool " + - "name": "status" + "type": "int" + "return_type": "void" + "signature": "void lwan_response(struct lwan_request *, DW_TAG_enumeration_typelwan_http_status)" +- "exceptions": [] + "name": "lwan_init" + "params": + - "name": "l" + "type": "bool " + "return_type": "void" + "signature": "void lwan_init(struct lwan *)" +- "exceptions": [] + "name": "lwan_process_request" + "params": + - "name": "l" + "type": "bool " + - "name": "request" + "type": "bool " + "return_type": "void" + "signature": "void lwan_process_request(struct lwan *, struct lwan_request *)" +- "exceptions": [] + "name": "lwan_init_with_config" + "params": + - "name": "l" + "type": "bool " + - "name": "config" + "type": "bool " + "return_type": "void" + "signature": "void lwan_init_with_config(struct lwan *, const struct lwan_config *)" +- "exceptions": [] + "name": "lwan_thread_init" + "params": + - "name": "l" + "type": "bool " + "return_type": "void" + "signature": "void lwan_thread_init(struct lwan *)" +"language": "c++" +"project": "lwan" +"target_name": "h2_huffman_fuzzer" +"target_path": "/src/lwan/src/bin/fuzz/h2_huffman_fuzzer.cc" diff --git a/benchmark-sets/headerfiles/mbedtls.yaml b/benchmark-sets/headerfiles/mbedtls.yaml new file mode 100644 index 0000000000..9478976b0d --- /dev/null +++ b/benchmark-sets/headerfiles/mbedtls.yaml @@ -0,0 +1,53 @@ +"functions": +- "exceptions": [] + "name": "mbedtls_ssl_write" + "params": + - "name": "ssl" + "type": "bool " + - "name": "buf" + "type": "bool " + - "name": "len" + "type": "size_t" + "return_type": "int" + "signature": "int mbedtls_ssl_write(mbedtls_ssl_context *, const unsigned char *, size_t)" +- "exceptions": [] + "name": "mbedtls_ssl_check_record" + "params": + - "name": "ssl" + "type": "bool " + - "name": "buf" + "type": "bool " + - "name": "buflen" + "type": "size_t" + "return_type": "int" + "signature": "int mbedtls_ssl_check_record(const mbedtls_ssl_context *, unsigned char *, size_t)" +- "exceptions": [] + "name": "mbedtls_pk_parse_keyfile" + "params": + - "name": "ctx" + "type": "bool " + - "name": "path" + "type": "bool " + - "name": "pwd" + "type": "bool " + - "name": "f_rng" + "type": "bool " + - "name": "p_rng" + "type": "bool " + "return_type": "int" + "signature": "int mbedtls_pk_parse_keyfile(mbedtls_pk_context *, const char *, const char *, DW_TAG_subroutine_typeInfinite loop *, void *)" +- "exceptions": [] + "name": "mbedtls_ssl_write_early_data" + "params": + - "name": "ssl" + "type": "bool " + - "name": "buf" + "type": "bool " + - "name": "len" + "type": "size_t" + "return_type": "int" + "signature": "int mbedtls_ssl_write_early_data(mbedtls_ssl_context *, const unsigned char *, size_t)" +"language": "c" +"project": "mbedtls" +"target_name": "usepsa-fuzz_x509csr" +"target_path": "/src/mbedtls/programs/fuzz/fuzz_x509csr.c" diff --git a/benchmark-sets/headerfiles/mdbtools.yaml b/benchmark-sets/headerfiles/mdbtools.yaml new file mode 100644 index 0000000000..e2fe76ddcf --- /dev/null +++ b/benchmark-sets/headerfiles/mdbtools.yaml @@ -0,0 +1,54 @@ +"functions": +- "exceptions": [] + "name": "mdb_data_dump" + "params": + - "name": "table" + "type": "bool " + "return_type": "void" + "signature": "void mdb_data_dump(MdbTableDef *)" +- "exceptions": [] + "name": "mdb_print_schema" + "params": + - "name": "mdb" + "type": "bool " + - "name": "outfile" + "type": "bool " + - "name": "tabname" + "type": "bool " + - "name": "dbnamespace" + "type": "bool " + - "name": "export_options" + "type": "int" + "return_type": "int" + "signature": "int mdb_print_schema(MdbHandle *, FILE *, char *, char *, guint32)" +- "exceptions": [] + "name": "mdb_dump_catalog" + "params": + - "name": "mdb" + "type": "bool " + - "name": "obj_type" + "type": "int" + "return_type": "void" + "signature": "void mdb_dump_catalog(MdbHandle *, int)" +- "exceptions": [] + "name": "mdb_table_dump" + "params": + - "name": "entry" + "type": "bool " + "return_type": "void" + "signature": "void mdb_table_dump(MdbCatalogEntry *)" +- "exceptions": [] + "name": "mdb_read_table_by_name" + "params": + - "name": "mdb" + "type": "bool " + - "name": "table_name" + "type": "bool " + - "name": "obj_type" + "type": "int" + "return_type": "void" + "signature": "MdbTableDef * mdb_read_table_by_name(MdbHandle *, gchar *, int)" +"language": "c" +"project": "mdbtools" +"target_name": "fuzz_mdb" +"target_path": "/src/mdbtools/src/fuzz/fuzz_mdb.c" diff --git a/benchmark-sets/headerfiles/minizip.yaml b/benchmark-sets/headerfiles/minizip.yaml new file mode 100644 index 0000000000..5460132df3 --- /dev/null +++ b/benchmark-sets/headerfiles/minizip.yaml @@ -0,0 +1,52 @@ +"functions": +- "exceptions": [] + "name": "mz_zip_entry_is_symlink" + "params": + - "name": "handle" + "type": "bool " + "return_type": "int" + "signature": "int32_t mz_zip_entry_is_symlink(void *)" +- "exceptions": [] + "name": "mz_zip_attrib_is_symlink" + "params": + - "name": "attrib" + "type": "int" + - "name": "version_madeby" + "type": "int" + "return_type": "int" + "signature": "int32_t mz_zip_attrib_is_symlink(uint32_t, int32_t)" +- "exceptions": [] + "name": "mz_zip_locate_first_entry" + "params": + - "name": "handle" + "type": "bool " + - "name": "userdata" + "type": "bool " + - "name": "cb" + "type": "bool " + "return_type": "int" + "signature": "int32_t mz_zip_locate_first_entry(void *, void *, mz_zip_locate_entry_cb)" +- "exceptions": [] + "name": "mz_zip_goto_entry" + "params": + - "name": "handle" + "type": "bool " + - "name": "cd_pos" + "type": "size_t" + "return_type": "int" + "signature": "int32_t mz_zip_goto_entry(void *, int64_t)" +- "exceptions": [] + "name": "mz_zip_locate_next_entry" + "params": + - "name": "handle" + "type": "bool " + - "name": "userdata" + "type": "bool " + - "name": "cb" + "type": "bool " + "return_type": "int" + "signature": "int32_t mz_zip_locate_next_entry(void *, void *, mz_zip_locate_entry_cb)" +"language": "c" +"project": "minizip" +"target_name": "standalone" +"target_path": "/src/minizip-ng/test/fuzz/standalone.c" diff --git a/benchmark-sets/headerfiles/ndpi.yaml b/benchmark-sets/headerfiles/ndpi.yaml new file mode 100644 index 0000000000..8596186110 --- /dev/null +++ b/benchmark-sets/headerfiles/ndpi.yaml @@ -0,0 +1,60 @@ +"functions": +- "exceptions": [] + "name": "mbedtls_cipher_write_tag" + "params": + - "name": "ctx" + "type": "bool " + - "name": "tag" + "type": "bool " + - "name": "tag_len" + "type": "size_t" + "return_type": "int" + "signature": "int mbedtls_cipher_write_tag(mbedtls_cipher_context_t *, unsigned char *, size_t)" +- "exceptions": [] + "name": "mbedtls_cipher_update_ad" + "params": + - "name": "ctx" + "type": "bool " + - "name": "ad" + "type": "bool " + - "name": "ad_len" + "type": "size_t" + "return_type": "int" + "signature": "int mbedtls_cipher_update_ad(mbedtls_cipher_context_t *, const unsigned char *, size_t)" +- "exceptions": [] + "name": "mbedtls_cipher_check_tag" + "params": + - "name": "ctx" + "type": "bool " + - "name": "tag" + "type": "bool " + - "name": "tag_len" + "type": "size_t" + "return_type": "int" + "signature": "int mbedtls_cipher_check_tag(mbedtls_cipher_context_t *, const unsigned char *, size_t)" +- "exceptions": [] + "name": "libinjection_sqli_get_token" + "params": + - "name": "sql_state" + "type": "bool " + - "name": "i" + "type": "int" + "return_type": "void" + "signature": "struct libinjection_sqli_token * libinjection_sqli_get_token(struct libinjection_sqli_state *, int)" +- "exceptions": [] + "name": "libinjection_sqli_lookup_word" + "params": + - "name": "sql_state" + "type": "bool " + - "name": "lookup_type" + "type": "int" + - "name": "str" + "type": "bool " + - "name": "len" + "type": "size_t" + "return_type": "char" + "signature": "char libinjection_sqli_lookup_word(struct libinjection_sqli_state *, int, const char *, size_t)" +"language": "c" +"project": "ndpi" +"target_name": "fuzz_filecfg_risk_domains" +"target_path": "/src/ndpi/fuzz/fuzz_filecfg_risk_domains.c" diff --git a/benchmark-sets/headerfiles/njs.yaml b/benchmark-sets/headerfiles/njs.yaml new file mode 100644 index 0000000000..781ced4f15 --- /dev/null +++ b/benchmark-sets/headerfiles/njs.yaml @@ -0,0 +1,60 @@ +"functions": +- "exceptions": [] + "name": "njs_buffer_new" + "params": + - "name": "vm" + "type": "bool " + - "name": "value" + "type": "bool " + - "name": "start" + "type": "bool " + - "name": "size" + "type": "int" + "return_type": "int" + "signature": "njs_int_t njs_buffer_new(njs_vm_t *, njs_value_t *, const u_char *, uint32_t)" +- "exceptions": [] + "name": "njs_vm_query_string_parse" + "params": + - "name": "vm" + "type": "bool " + - "name": "start" + "type": "bool " + - "name": "end" + "type": "bool " + - "name": "retval" + "type": "bool " + "return_type": "int" + "signature": "njs_int_t njs_vm_query_string_parse(njs_vm_t *, u_char *, u_char *, njs_value_t *)" +- "exceptions": [] + "name": "njs_vm_value_string" + "params": + - "name": "vm" + "type": "bool " + - "name": "dst" + "type": "bool " + - "name": "src" + "type": "bool " + "return_type": "int" + "signature": "njs_int_t njs_vm_value_string(njs_vm_t *, njs_str_t *, njs_value_t *)" +- "exceptions": [] + "name": "njs_vm_exception_string" + "params": + - "name": "vm" + "type": "bool " + - "name": "dst" + "type": "bool " + "return_type": "int" + "signature": "njs_int_t njs_vm_exception_string(njs_vm_t *, njs_str_t *)" +- "exceptions": [] + "name": "njs_vm_clone" + "params": + - "name": "vm" + "type": "bool " + - "name": "external" + "type": "bool " + "return_type": "void" + "signature": "njs_vm_t * njs_vm_clone(njs_vm_t *, njs_external_ptr_t)" +"language": "c" +"project": "njs" +"target_name": "njs_process_script_fuzzer" +"target_path": "/src/njs/external/njs_shell.c" diff --git a/benchmark-sets/headerfiles/oniguruma.yaml b/benchmark-sets/headerfiles/oniguruma.yaml new file mode 100644 index 0000000000..851f2d6f6b --- /dev/null +++ b/benchmark-sets/headerfiles/oniguruma.yaml @@ -0,0 +1,35 @@ +"functions": +- "exceptions": [] + "name": "onig_set_meta_char" + "params": + - "name": "enc" + "type": "bool " + - "name": "what" + "type": "int" + - "name": "code" + "type": "int" + "return_type": "int" + "signature": "int onig_set_meta_char(OnigSyntaxType *, unsigned int, OnigCodePoint)" +- "exceptions": [] + "name": "onig_scan" + "params": + - "name": "reg" + "type": "bool " + - "name": "str" + "type": "bool " + - "name": "end" + "type": "bool " + - "name": "region" + "type": "bool " + - "name": "option" + "type": "int" + - "name": "scan_callback" + "type": "bool " + - "name": "callback_arg" + "type": "bool " + "return_type": "int" + "signature": "int onig_scan(regex_t *, const OnigUChar *, const OnigUChar *, OnigRegion *, OnigOptionType, DW_TAG_subroutine_typeInfinite loop *, void *)" +"language": "c" +"project": "oniguruma" +"target_name": "regset" +"target_path": "/src/oniguruma/harnesses/regset.c" diff --git a/benchmark-sets/headerfiles/openexr.yaml b/benchmark-sets/headerfiles/openexr.yaml new file mode 100644 index 0000000000..618e1e2282 --- /dev/null +++ b/benchmark-sets/headerfiles/openexr.yaml @@ -0,0 +1,58 @@ +"functions": +- "exceptions": [] + "name": "_ZN7Imf_3_318DeepTiledInputFile8readTileEiii" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "int" + - "name": "" + "type": "int" + - "name": "" + "type": "int" + "return_type": "void" + "signature": "void Imf_3_3::DeepTiledInputFile::readTile(int, int, int)" +- "exceptions": [] + "name": "_ZN7Imf_3_314RgbaOutputFile11writePixelsEi" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "int" + "return_type": "void" + "signature": "void Imf_3_3::RgbaOutputFile::writePixels(int)" +- "exceptions": [] + "name": "_ZN7Imf_3_314RgbaOutputFile5ToYca11writePixelsEi" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "int" + "return_type": "void" + "signature": "void Imf_3_3::RgbaOutputFile::ToYca::writePixels(int)" +- "exceptions": [] + "name": "_ZN7Imf_3_318DeepTiledInputPart8readTileEiii" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "int" + - "name": "" + "type": "int" + - "name": "" + "type": "int" + "return_type": "void" + "signature": "void Imf_3_3::DeepTiledInputPart::readTile(int, int, int)" +- "exceptions": [] + "name": "_ZN7Imf_3_310OutputFile10initializeERKNS_6HeaderE" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "bool " + "return_type": "void" + "signature": "void Imf_3_3::OutputFile::initialize(const Header &)" +"language": "c++" +"project": "openexr" +"target_name": "openexr_exrcheck_fuzzer" +"target_path": "/src/openexr/src/test/OpenEXRFuzzTest/oss-fuzz/openexr_exrcheck_fuzzer.cc" diff --git a/benchmark-sets/headerfiles/opusfile.yaml b/benchmark-sets/headerfiles/opusfile.yaml new file mode 100644 index 0000000000..88e3843aa8 --- /dev/null +++ b/benchmark-sets/headerfiles/opusfile.yaml @@ -0,0 +1,58 @@ +"functions": +- "exceptions": [] + "name": "op_read" + "params": + - "name": "_of" + "type": "bool " + - "name": "_pcm" + "type": "bool " + - "name": "_buf_size" + "type": "int" + - "name": "_li" + "type": "bool " + "return_type": "int" + "signature": "int op_read(OggOpusFile *, opus_int16 *, int, int *)" +- "exceptions": [] + "name": "op_test_open" + "params": + - "name": "_of" + "type": "bool " + "return_type": "int" + "signature": "int op_test_open(OggOpusFile *)" +- "exceptions": [] + "name": "op_read_float" + "params": + - "name": "_of" + "type": "bool " + - "name": "_pcm" + "type": "bool " + - "name": "_buf_size" + "type": "int" + - "name": "_li" + "type": "bool " + "return_type": "int" + "signature": "int op_read_float(OggOpusFile *, float *, int, int *)" +- "exceptions": [] + "name": "op_read_float_stereo" + "params": + - "name": "_of" + "type": "bool " + - "name": "_pcm" + "type": "bool " + - "name": "_buf_size" + "type": "int" + "return_type": "int" + "signature": "int op_read_float_stereo(OggOpusFile *, float *, int)" +- "exceptions": [] + "name": "op_open_file" + "params": + - "name": "_path" + "type": "bool " + - "name": "_error" + "type": "bool " + "return_type": "void" + "signature": "OggOpusFile * op_open_file(const char *, int *)" +"language": "c" +"project": "opusfile" +"target_name": "opusfile_fuzzer" +"target_path": "/src/opusfile_fuzzer.c" diff --git a/benchmark-sets/headerfiles/picotls.yaml b/benchmark-sets/headerfiles/picotls.yaml new file mode 100644 index 0000000000..75e9139a6c --- /dev/null +++ b/benchmark-sets/headerfiles/picotls.yaml @@ -0,0 +1,88 @@ +"functions": +- "exceptions": [] + "name": "ptls_send" + "params": + - "name": "tls" + "type": "bool " + - "name": "sendbuf" + "type": "bool " + - "name": "input" + "type": "bool " + - "name": "inlen" + "type": "size_t" + "return_type": "int" + "signature": "int ptls_send(ptls_t *, ptls_buffer_t *, const void *, size_t)" +- "exceptions": [] + "name": "ptls_server_handle_message" + "params": + - "name": "tls" + "type": "bool " + - "name": "sendbuf" + "type": "bool " + - "name": "epoch_offsets" + "type": "bool " + - "name": "in_epoch" + "type": "size_t" + - "name": "input" + "type": "bool " + - "name": "inlen" + "type": "size_t" + - "name": "properties" + "type": "bool " + "return_type": "int" + "signature": "int ptls_server_handle_message(ptls_t *, ptls_buffer_t *, size_t *, size_t, const void *, size_t, ptls_handshake_properties_t *)" +- "exceptions": [] + "name": "ptls_import" + "params": + - "name": "ctx" + "type": "bool " + - "name": "tls" + "type": "bool " + - "name": "params" + "type": "bool " + - "name": "" + "type": "size_t" + "return_type": "int" + "signature": "int ptls_import(ptls_context_t *, ptls_t **, ptls_iovec_t)" +- "exceptions": [] + "name": "ptls_client_handle_message" + "params": + - "name": "tls" + "type": "bool " + - "name": "sendbuf" + "type": "bool " + - "name": "epoch_offsets" + "type": "bool " + - "name": "in_epoch" + "type": "size_t" + - "name": "input" + "type": "bool " + - "name": "inlen" + "type": "size_t" + - "name": "properties" + "type": "bool " + "return_type": "int" + "signature": "int ptls_client_handle_message(ptls_t *, ptls_buffer_t *, size_t *, size_t, const void *, size_t, ptls_handshake_properties_t *)" +- "exceptions": [] + "name": "ptls_handle_message" + "params": + - "name": "tls" + "type": "bool " + - "name": "sendbuf" + "type": "bool " + - "name": "epoch_offsets" + "type": "bool " + - "name": "in_epoch" + "type": "size_t" + - "name": "input" + "type": "bool " + - "name": "inlen" + "type": "size_t" + - "name": "properties" + "type": "bool " + "return_type": "int" + "signature": "int ptls_handle_message(ptls_t *, ptls_buffer_t *, size_t *, size_t, const void *, size_t, ptls_handshake_properties_t *)" +"language": "c" +"project": "picotls" +"target_name": "fuzz-server-hello" +"target_path": "/src/picotls/fuzz/fuzz-server-hello.c" diff --git a/benchmark-sets/headerfiles/pjsip.yaml b/benchmark-sets/headerfiles/pjsip.yaml new file mode 100644 index 0000000000..adcc8280c4 --- /dev/null +++ b/benchmark-sets/headerfiles/pjsip.yaml @@ -0,0 +1,78 @@ +"functions": +- "exceptions": [] + "name": "pjsip_endpt_send_request_stateless" + "params": + - "name": "endpt" + "type": "bool " + - "name": "tdata" + "type": "bool " + - "name": "token" + "type": "bool " + - "name": "cb" + "type": "bool " + "return_type": "int" + "signature": "pj_status_t pjsip_endpt_send_request_stateless(pjsip_endpoint *, pjsip_tx_data *, void *, pjsip_send_callback)" +- "exceptions": [] + "name": "pjsip_endpt_send_raw_to_uri" + "params": + - "name": "endpt" + "type": "bool " + - "name": "p_dst_uri" + "type": "bool " + - "name": "sel" + "type": "bool " + - "name": "raw_data" + "type": "bool " + - "name": "data_len" + "type": "size_t" + - "name": "token" + "type": "bool " + - "name": "cb" + "type": "bool " + "return_type": "int" + "signature": "pj_status_t pjsip_endpt_send_raw_to_uri(pjsip_endpoint *, const pj_str_t *, const pjsip_tpselector *, const void *, pj_size_t, void *, pjsip_tp_send_callback)" +- "exceptions": [] + "name": "pjsip_tsx_retransmit_no_state" + "params": + - "name": "tsx" + "type": "bool " + - "name": "tdata" + "type": "bool " + "return_type": "int" + "signature": "pj_status_t pjsip_tsx_retransmit_no_state(pjsip_transaction *, pjsip_tx_data *)" +- "exceptions": [] + "name": "pjsip_endpt_respond_stateless" + "params": + - "name": "endpt" + "type": "bool " + - "name": "rdata" + "type": "bool " + - "name": "st_code" + "type": "int" + - "name": "st_text" + "type": "bool " + - "name": "hdr_list" + "type": "bool " + - "name": "body" + "type": "bool " + "return_type": "int" + "signature": "pj_status_t pjsip_endpt_respond_stateless(pjsip_endpoint *, pjsip_rx_data *, int, const pj_str_t *, const pjsip_hdr *, const pjsip_msg_body *)" +- "exceptions": [] + "name": "pjmedia_endpt_create_sdp" + "params": + - "name": "endpt" + "type": "bool " + - "name": "pool" + "type": "bool " + - "name": "stream_cnt" + "type": "int" + - "name": "sock_info" + "type": "bool " + - "name": "p_sdp" + "type": "bool " + "return_type": "int" + "signature": "pj_status_t pjmedia_endpt_create_sdp(pjmedia_endpt *, pj_pool_t *, unsigned int, const pjmedia_sock_info *, pjmedia_sdp_session **)" +"language": "c" +"project": "pjsip" +"target_name": "fuzz-crypto" +"target_path": "/src/pjsip/tests/fuzz/fuzz-crypto.c" diff --git a/benchmark-sets/headerfiles/proftpd.yaml b/benchmark-sets/headerfiles/proftpd.yaml new file mode 100644 index 0000000000..28a9ef2a1b --- /dev/null +++ b/benchmark-sets/headerfiles/proftpd.yaml @@ -0,0 +1,68 @@ +"functions": +- "exceptions": [] + "name": "dir_check" + "params": + - "name": "pp" + "type": "bool " + - "name": "cmd" + "type": "bool " + - "name": "group" + "type": "bool " + - "name": "path" + "type": "bool " + - "name": "hidden" + "type": "bool " + "return_type": "int" + "signature": "int dir_check(pool *, cmd_rec *, const char *, const char *, int *)" +- "exceptions": [] + "name": "dir_check_canon" + "params": + - "name": "pp" + "type": "bool " + - "name": "cmd" + "type": "bool " + - "name": "group" + "type": "bool " + - "name": "path" + "type": "bool " + - "name": "hidden" + "type": "bool " + "return_type": "int" + "signature": "int dir_check_canon(pool *, cmd_rec *, const char *, const char *, int *)" +- "exceptions": [] + "name": "core_chmod" + "params": + - "name": "cmd" + "type": "bool " + - "name": "path" + "type": "bool " + - "name": "mode" + "type": "int" + "return_type": "int" + "signature": "int core_chmod(cmd_rec *, const char *, mode_t)" +- "exceptions": [] + "name": "core_chgrp" + "params": + - "name": "cmd" + "type": "bool " + - "name": "path" + "type": "bool " + - "name": "uid" + "type": "int" + - "name": "gid" + "type": "int" + "return_type": "int" + "signature": "int core_chgrp(cmd_rec *, const char *, uid_t, gid_t)" +- "exceptions": [] + "name": "pr_data_xfer" + "params": + - "name": "cl_buf" + "type": "bool " + - "name": "cl_size" + "type": "size_t" + "return_type": "int" + "signature": "int pr_data_xfer(char *, size_t)" +"language": "c" +"project": "proftpd" +"target_name": "json_fuzzer" +"target_path": "/src/proftpd/tests/fuzzing/json_fuzzer.c" diff --git a/benchmark-sets/headerfiles/pupnp.yaml b/benchmark-sets/headerfiles/pupnp.yaml new file mode 100644 index 0000000000..9ac673b08d --- /dev/null +++ b/benchmark-sets/headerfiles/pupnp.yaml @@ -0,0 +1,50 @@ +"functions": +- "exceptions": [] + "name": "ixmlParseBuffer" + "params": + - "name": "buffer" + "type": "bool " + "return_type": "void" + "signature": "IXML_Document * ixmlParseBuffer(const char *)" +- "exceptions": [] + "name": "ixmlParseBufferEx" + "params": + - "name": "buffer" + "type": "bool " + - "name": "retDoc" + "type": "bool " + "return_type": "int" + "signature": "int ixmlParseBufferEx(const char *, IXML_Document **)" +- "exceptions": [] + "name": "ixmlNode_cloneNode" + "params": + - "name": "nodeptr" + "type": "bool " + - "name": "deep" + "type": "int" + "return_type": "void" + "signature": "IXML_Node * ixmlNode_cloneNode(IXML_Node *, int)" +- "exceptions": [] + "name": "ixmlLoadDocument" + "params": + - "name": "xmlFile" + "type": "bool " + "return_type": "void" + "signature": "IXML_Document * ixmlLoadDocument(const char *)" +- "exceptions": [] + "name": "ixmlDocument_importNode" + "params": + - "name": "doc" + "type": "bool " + - "name": "importNode" + "type": "bool " + - "name": "deep" + "type": "int" + - "name": "rtNode" + "type": "bool " + "return_type": "int" + "signature": "int ixmlDocument_importNode(IXML_Document *, IXML_Node *, int, IXML_Node **)" +"language": "c" +"project": "pupnp" +"target_name": "FuzzIxml" +"target_path": "/src/pupnp/fuzzer/FuzzIxml.c" diff --git a/benchmark-sets/headerfiles/sleuthkit.yaml b/benchmark-sets/headerfiles/sleuthkit.yaml new file mode 100644 index 0000000000..1816b4ca6c --- /dev/null +++ b/benchmark-sets/headerfiles/sleuthkit.yaml @@ -0,0 +1,68 @@ +"functions": +- "exceptions": [] + "name": "tsk_fs_open_vol" + "params": + - "name": "a_part_info" + "type": "bool " + - "name": "a_ftype" + "type": "int" + "return_type": "void" + "signature": "TSK_FS_INFO * tsk_fs_open_vol(const TSK_VS_PART_INFO *, TSK_FS_TYPE_ENUM)" +- "exceptions": [] + "name": "tsk_fs_open_vol_decrypt" + "params": + - "name": "a_part_info" + "type": "bool " + - "name": "a_ftype" + "type": "int" + - "name": "a_pass" + "type": "bool " + "return_type": "void" + "signature": "TSK_FS_INFO * tsk_fs_open_vol_decrypt(const TSK_VS_PART_INFO *, TSK_FS_TYPE_ENUM, const char *)" +- "exceptions": [] + "name": "_ZNK12APFSFSCompat5istatE22TSK_FS_ISTAT_FLAG_ENUMP8_IO_FILEmmi" + "params": + - "name": "this" + "type": "bool " + - "name": "istat_flags" + "type": "int" + - "name": "hFile" + "type": "bool " + - "name": "inode_num" + "type": "size_t" + - "name": "numblock" + "type": "size_t" + - "name": "sec_skew" + "type": "int" + "return_type": "char" + "signature": "uint8_t APFSFSCompat::istat(TSK_FS_ISTAT_FLAG_ENUM, FILE *, TSK_INUM_T, TSK_DADDR_T, int32_t)" +- "exceptions": [] + "name": "ntfs_dir_open_meta" + "params": + - "name": "a_fs" + "type": "bool " + - "name": "a_fs_dir" + "type": "bool " + - "name": "a_addr" + "type": "size_t" + - "name": "recursion_depth" + "type": "int" + "return_type": "int" + "signature": "TSK_RETVAL_ENUM ntfs_dir_open_meta(TSK_FS_INFO *, TSK_FS_DIR **, TSK_INUM_T, int)" +- "exceptions": [] + "name": "ffs_dir_open_meta" + "params": + - "name": "a_fs" + "type": "bool " + - "name": "a_fs_dir" + "type": "bool " + - "name": "a_addr" + "type": "size_t" + - "name": "recursion_depth" + "type": "int" + "return_type": "int" + "signature": "TSK_RETVAL_ENUM ffs_dir_open_meta(TSK_FS_INFO *, TSK_FS_DIR **, TSK_INUM_T, int)" +"language": "c++" +"project": "sleuthkit" +"target_name": "sleuthkit_mmls_sun_fuzzer" +"target_path": "/src/sleuthkit_mmls_fuzzer.cc" diff --git a/benchmark-sets/headerfiles/tidy-html5.yaml b/benchmark-sets/headerfiles/tidy-html5.yaml new file mode 100644 index 0000000000..e1a334f087 --- /dev/null +++ b/benchmark-sets/headerfiles/tidy-html5.yaml @@ -0,0 +1,48 @@ +"functions": +- "exceptions": [] + "name": "tidySaveStdout" + "params": + - "name": "tdoc" + "type": "bool " + "return_type": "int" + "signature": "int tidySaveStdout(TidyDoc)" +- "exceptions": [] + "name": "tidySaveString" + "params": + - "name": "tdoc" + "type": "bool " + - "name": "buffer" + "type": "bool " + - "name": "buflen" + "type": "bool " + "return_type": "int" + "signature": "int tidySaveString(TidyDoc, tmbstr, uint *)" +- "exceptions": [] + "name": "tidyParseSource" + "params": + - "name": "tdoc" + "type": "bool " + - "name": "source" + "type": "bool " + "return_type": "int" + "signature": "int tidyParseSource(TidyDoc, TidyInputSource *)" +- "exceptions": [] + "name": "tidyParseStdin" + "params": + - "name": "tdoc" + "type": "bool " + "return_type": "int" + "signature": "int tidyParseStdin(TidyDoc)" +- "exceptions": [] + "name": "tidySaveFile" + "params": + - "name": "tdoc" + "type": "bool " + - "name": "filnam" + "type": "bool " + "return_type": "int" + "signature": "int tidySaveFile(TidyDoc, ctmbstr)" +"language": "c" +"project": "tidy-html5" +"target_name": "tidy_fuzzer" +"target_path": "/src/tidy_fuzzer.c" diff --git a/benchmark-sets/headerfiles/unicorn.yaml b/benchmark-sets/headerfiles/unicorn.yaml new file mode 100644 index 0000000000..e2d3b49226 --- /dev/null +++ b/benchmark-sets/headerfiles/unicorn.yaml @@ -0,0 +1,64 @@ +"functions": +- "exceptions": [] + "name": "decNumberLn" + "params": + - "name": "res" + "type": "bool " + - "name": "rhs" + "type": "bool " + - "name": "set" + "type": "bool " + "return_type": "void" + "signature": "decNumber * decNumberLn(decNumber *, const decNumber *, decContext *)" +- "exceptions": [] + "name": "decNumberSquareRoot" + "params": + - "name": "res" + "type": "bool " + - "name": "rhs" + "type": "bool " + - "name": "set" + "type": "bool " + "return_type": "void" + "signature": "decNumber * decNumberSquareRoot(decNumber *, const decNumber *, decContext *)" +- "exceptions": [] + "name": "ppc64_v3_handle_mmu_fault" + "params": + - "name": "cpu" + "type": "bool " + - "name": "eaddr" + "type": "size_t" + - "name": "rwx" + "type": "int" + - "name": "mmu_idx" + "type": "int" + "return_type": "int" + "signature": "int ppc64_v3_handle_mmu_fault(PowerPCCPU *, vaddr, int, int)" +- "exceptions": [] + "name": "decNumberLog10" + "params": + - "name": "res" + "type": "bool " + - "name": "rhs" + "type": "bool " + - "name": "set" + "type": "bool " + "return_type": "void" + "signature": "decNumber * decNumberLog10(decNumber *, const decNumber *, decContext *)" +- "exceptions": [] + "name": "decNumberPower" + "params": + - "name": "res" + "type": "bool " + - "name": "lhs" + "type": "bool " + - "name": "rhs" + "type": "bool " + - "name": "set" + "type": "bool " + "return_type": "void" + "signature": "decNumber * decNumberPower(decNumber *, const decNumber *, const decNumber *, decContext *)" +"language": "c" +"project": "unicorn" +"target_name": "fuzz_emu_arm_armbe" +"target_path": "/src/unicorn/tests/fuzz/fuzz_emu_arm_armbe.c" diff --git a/benchmark-sets/headerfiles/unit.yaml b/benchmark-sets/headerfiles/unit.yaml new file mode 100644 index 0000000000..dab31fe7c8 --- /dev/null +++ b/benchmark-sets/headerfiles/unit.yaml @@ -0,0 +1,52 @@ +"functions": +- "exceptions": [] + "name": "nxt_runtime_create" + "params": + - "name": "task" + "type": "bool " + "return_type": "int" + "signature": "nxt_int_t nxt_runtime_create(nxt_task_t *)" +- "exceptions": [] + "name": "nxt_process_init_start" + "params": + - "name": "task" + "type": "bool " + - "name": "init" + "type": "bool " + "return_type": "int" + "signature": "nxt_int_t nxt_process_init_start(nxt_task_t *, nxt_process_init_t)" +- "exceptions": [] + "name": "nxt_main_process_start" + "params": + - "name": "thr" + "type": "bool " + - "name": "task" + "type": "bool " + - "name": "rt" + "type": "bool " + "return_type": "int" + "signature": "nxt_int_t nxt_main_process_start(nxt_thread_t *, nxt_task_t *, nxt_runtime_t *)" +- "exceptions": [] + "name": "nxt_process_start" + "params": + - "name": "task" + "type": "bool " + - "name": "process" + "type": "bool " + "return_type": "int" + "signature": "nxt_int_t nxt_process_start(nxt_task_t *, nxt_process_t *)" +- "exceptions": [] + "name": "nxt_http_application_handler" + "params": + - "name": "task" + "type": "bool " + - "name": "r" + "type": "bool " + - "name": "action" + "type": "bool " + "return_type": "void" + "signature": "nxt_http_action_t * nxt_http_application_handler(nxt_task_t *, nxt_http_request_t *, nxt_http_action_t *)" +"language": "c" +"project": "unit" +"target_name": "fuzz_http_h1p_peer" +"target_path": "/src/unit/fuzzing/nxt_http_h1p_peer_fuzz.c" diff --git a/benchmark-sets/headerfiles/utf8proc.yaml b/benchmark-sets/headerfiles/utf8proc.yaml new file mode 100644 index 0000000000..37f8b36d5b --- /dev/null +++ b/benchmark-sets/headerfiles/utf8proc.yaml @@ -0,0 +1,27 @@ +"functions": +- "exceptions": [] + "name": "utf8proc_decompose" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "size_t" + - "name": "" + "type": "bool " + - "name": "" + "type": "size_t" + - "name": "" + "type": "int" + "return_type": "size_t" + "signature": "utf8proc_ssize_t utf8proc_decompose(const utf8proc_uint8_t *, utf8proc_ssize_t, utf8proc_int32_t *, utf8proc_ssize_t, utf8proc_option_t)" +- "exceptions": [] + "name": "utf8proc_errmsg" + "params": + - "name": "" + "type": "size_t" + "return_type": "void" + "signature": "const char * utf8proc_errmsg(utf8proc_ssize_t)" +"language": "c" +"project": "utf8proc" +"target_name": "fuzz_main" +"target_path": "/src/utf8proc/test/fuzz_main.c" diff --git a/benchmark-sets/headerfiles/vlc.yaml b/benchmark-sets/headerfiles/vlc.yaml new file mode 100644 index 0000000000..5dce746355 --- /dev/null +++ b/benchmark-sets/headerfiles/vlc.yaml @@ -0,0 +1,46 @@ +"functions": +- "exceptions": [] + "name": "ExecuteCommand" + "params": + - "name": "p_vlm" + "type": "bool " + - "name": "psz_command" + "type": "bool " + - "name": "pp_message" + "type": "bool " + "return_type": "int" + "signature": "int ExecuteCommand(vlm_t *, const char *, vlm_message_t **)" +- "exceptions": [] + "name": "Preparse" + "params": + - "name": "data" + "type": "bool " + "return_type": "void" + "signature": "void * Preparse(void *)" +- "exceptions": [] + "name": "libvlc_release" + "params": + - "name": "p_instance" + "type": "bool " + "return_type": "void" + "signature": "void libvlc_release(libvlc_instance_t *)" +- "exceptions": [] + "name": "vlm_New" + "params": + - "name": "libvlc" + "type": "bool " + - "name": "psz_vlmconf" + "type": "bool " + "return_type": "void" + "signature": "vlm_t * vlm_New(libvlc_int_t *, const char *)" +- "exceptions": [] + "name": "libvlc_InternalCleanup" + "params": + - "name": "p_libvlc" + "type": "bool " + "return_type": "void" + "signature": "void libvlc_InternalCleanup(libvlc_int_t *)" +"language": "c" +"project": "vlc" +"target_name": "vlc-demux-libfuzzer" +"target_path": "/src/vlc/test/vlc-demux-libfuzzer.c" diff --git a/benchmark-sets/headerfiles/w3m.yaml b/benchmark-sets/headerfiles/w3m.yaml new file mode 100644 index 0000000000..0c6290f499 --- /dev/null +++ b/benchmark-sets/headerfiles/w3m.yaml @@ -0,0 +1,46 @@ +"functions": +- "exceptions": [] + "name": "Stralign_left" + "params": + - "name": "s" + "type": "bool " + - "name": "width" + "type": "int" + "return_type": "void" + "signature": "Str Stralign_left(Str, int)" +- "exceptions": [] + "name": "Strnew_m_charp" + "params": + - "name": "p" + "type": "bool " + "return_type": "void" + "signature": "Str Strnew_m_charp(const char *, void)" +- "exceptions": [] + "name": "Stralign_center" + "params": + - "name": "s" + "type": "bool " + - "name": "width" + "type": "int" + "return_type": "void" + "signature": "Str Stralign_center(Str, int)" +- "exceptions": [] + "name": "Sprintf" + "params": + - "name": "fmt" + "type": "bool " + "return_type": "void" + "signature": "Str Sprintf(char *, void)" +- "exceptions": [] + "name": "Stralign_right" + "params": + - "name": "s" + "type": "bool " + - "name": "width" + "type": "int" + "return_type": "void" + "signature": "Str Stralign_right(Str, int)" +"language": "c" +"project": "w3m" +"target_name": "fuzz_conv" +"target_path": "/src/w3m/fuzz/fuzz-conv.c" diff --git a/benchmark-sets/headerfiles/wasm3.yaml b/benchmark-sets/headerfiles/wasm3.yaml new file mode 100644 index 0000000000..9cc9c9dc8c --- /dev/null +++ b/benchmark-sets/headerfiles/wasm3.yaml @@ -0,0 +1,19 @@ +"functions": +- "exceptions": [] + "name": "m3_GetFunctionName" + "params": + - "name": "" + "type": "bool " + "return_type": "void" + "signature": "const char * m3_GetFunctionName(IM3Function)" +- "exceptions": [] + "name": "m3_GetMemorySize" + "params": + - "name": "" + "type": "bool " + "return_type": "int" + "signature": "uint32_t m3_GetMemorySize(IM3Runtime)" +"language": "c" +"project": "wasm3" +"target_name": "fuzzer" +"target_path": "/src/wasm3/platforms/app_fuzz/fuzzer.c" diff --git a/benchmark-sets/headerfiles/zydis.yaml b/benchmark-sets/headerfiles/zydis.yaml new file mode 100644 index 0000000000..5c8edd30d3 --- /dev/null +++ b/benchmark-sets/headerfiles/zydis.yaml @@ -0,0 +1,54 @@ +"functions": +- "exceptions": [] + "name": "ZydisFormatterBufferRestore" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "size_t" + "return_type": "int" + "signature": "ZyanStatus ZydisFormatterBufferRestore(ZydisFormatterBuffer *, ZyanUPointer)" +- "exceptions": [] + "name": "ZydisFormatterBasePrintPrefixes" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "bool " + - "name": "" + "type": "bool " + "return_type": "int" + "signature": "ZyanStatus ZydisFormatterBasePrintPrefixes(const ZydisFormatter *, ZydisFormatterBuffer *, ZydisFormatterContext *)" +- "exceptions": [] + "name": "ZydisEncoderNopFill" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "size_t" + "return_type": "int" + "signature": "ZyanStatus ZydisEncoderNopFill(void *, ZyanUSize)" +- "exceptions": [] + "name": "ZydisFormatterSetHook" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "int" + - "name": "" + "type": "bool " + "return_type": "int" + "signature": "ZyanStatus ZydisFormatterSetHook(ZydisFormatter *, ZydisFormatterFunction, const void **)" +- "exceptions": [] + "name": "ZydisFormatterBufferGetString" + "params": + - "name": "" + "type": "bool " + - "name": "" + "type": "bool " + "return_type": "int" + "signature": "ZyanStatus ZydisFormatterBufferGetString(ZydisFormatterBuffer *, ZyanString **)" +"language": "c" +"project": "zydis" +"target_name": "ZydisFuzzReEncoding" +"target_path": "/src/zydis/tools/ZydisFuzzShared.c" diff --git a/data_prep/introspector.py b/data_prep/introspector.py index 8126e11994..92aed8ec8b 100755 --- a/data_prep/introspector.py +++ b/data_prep/introspector.py @@ -38,7 +38,9 @@ T = TypeVar('T', str, list, dict, int) # Generic type. TIMEOUT = 45 -MAX_RETRY = 5 +# We intentionally set MAX_RETRY as 0 for just comparing the build success rate +# for initial generated drivers/fuzz targets. +MAX_RETRY = 0 USE_FI_TO_GET_TARGETS = bool(int(os.getenv('OSS_FI_TO_GET_TARGETS', '1'))) diff --git a/data_prep/project_context/context_introspector.py b/data_prep/project_context/context_introspector.py index 90f2806426..29edf7c7a2 100644 --- a/data_prep/project_context/context_introspector.py +++ b/data_prep/project_context/context_introspector.py @@ -6,6 +6,10 @@ from difflib import SequenceMatcher from typing import Any, Optional +# import headerfiles.api as headerfiles +# Eventually we will use headerfiles as an external library for Pypi installation. +# Now we use headerfiles as a module and want to see the performance difference first. +from headerfiles.headerfiles import api as headerfiles from data_prep import introspector from experiment import benchmark as benchmarklib @@ -13,6 +17,7 @@ COMPLEX_TYPES = ['const', 'enum', 'struct', 'union', 'volatile'] +HEADERFILES = bool(os.getenv('LLM_HEADERFILES', '')) class ContextRetriever: """Class to retrieve context from introspector for @@ -56,7 +61,7 @@ def _get_source_line(self, item: dict) -> int: def _get_source_file(self, item: dict) -> str: return self._get_nested_item(item, 'source', 'source_file') - def _get_files_to_include(self) -> list[str]: + def _infer_files_via_types(self) -> list[str]: """Retrieves files to include. These files are found from the source files for complex types seen in the function declaration.""" @@ -107,6 +112,19 @@ def _get_files_to_include(self) -> list[str]: return list(files) + def _get_files_to_include(self) -> list[str]: + if HEADERFILES: + proj_header_files = headerfiles.get_proj_headers(self._benchmark.project) + else: + proj_header_files = [] + type_based_files = self._infer_files_via_types() + + header_files = proj_header_files + for file in type_based_files: + if file not in header_files: + header_files.append(file) + return header_files + def _clean_type(self, type_name: str) -> str: """Cleans a type so that it can be fetched from FI.""" if not type_name: diff --git a/data_prep/project_src.py b/data_prep/project_src.py index 4cce93dee3..3e1e3576c6 100755 --- a/data_prep/project_src.py +++ b/data_prep/project_src.py @@ -245,7 +245,6 @@ def _copy_project_src_from_local(project: str, out: str, language: str): 'docker', 'run', '-d', - '--rm', '--shm-size=2g', '--platform', 'linux/amd64', @@ -286,7 +285,10 @@ def _copy_project_src_from_local(project: str, out: str, language: str): logger.error('Failed to run OSS-Fuzz image of %s:', project) logger.error('STDOUT: %s', result.stdout) logger.error('STDERR: %s', result.stderr) - raise Exception(f'Failed to run docker command: {" ".join(run_container)}') + # I silenced the following code to avoid the bug: "Docker: Error response from daemon: Conflict." + # Also, I deleted "-rm" in run_container to ensure that the container exists when copy_strc is executed. + # Otherwise, some projects like avahi can not be fully test. + #raise Exception(f'Failed to run docker command: {" ".join(run_container)}') try: copy_src = ['docker', 'cp', f'{project}-container:/src', out] diff --git a/experiment/builder_runner.py b/experiment/builder_runner.py index 5be1b842d2..3eebbcd11d 100644 --- a/experiment/builder_runner.py +++ b/experiment/builder_runner.py @@ -121,6 +121,8 @@ def __init__(self, def _libfuzzer_args(self) -> list[str]: return [ '-print_final_stats=1', + # We intentionally set it to 0 to speed up our testing for headerfiles. + '-runs=0', f'-max_total_time={self.run_timeout}', # Without this flag, libFuzzer only consider short inputs in short # experiments, which lowers the coverage for quick performance tests. diff --git a/experiment/evaluator.py b/experiment/evaluator.py index dd0bc4ccb7..242fa0a835 100644 --- a/experiment/evaluator.py +++ b/experiment/evaluator.py @@ -24,6 +24,11 @@ from google.cloud import storage +# import headerfiles.api as headerfiles +# Eventually we will use headerfiles as an external library for Pypi installation. +# Now we use headerfiles as a module and want to see the performance difference first. +from headerfiles.headerfiles import api as headerfiles + from experiment import builder_runner, oss_fuzz_checkout, textcov from experiment.benchmark import Benchmark from experiment.builder_runner import BuildResult, RunResult @@ -34,8 +39,9 @@ logger = logging.getLogger(__name__) -LLM_FIX_LIMIT = int(os.getenv('LLM_FIX_LIMIT', '5')) +LLM_FIX_LIMIT = int(os.getenv('LLM_FIX_LIMIT', '0')) GENERATE_CORPUS = bool(os.getenv('LLM_GENERATE_CORPUS', '')) +HEADERFILES = bool(os.getenv('LLM_HEADERFILES', '')) OSS_FUZZ_COVERAGE_BUCKET = 'oss-fuzz-coverage' OSS_FUZZ_INTROSPECTOR_BUCKET = 'oss-fuzz-introspector' @@ -305,6 +311,26 @@ def triage_crash( dual_logger.log(f'Warning: no crash info in {generated_oss_fuzz_project}.') return TriageResult.NOT_APPLICABLE + def update_build_with_headerfiles_installation(self, generated_oss_fuzz_project): + """Updates the build script with header files installation & include logic""" + generated_project_path = os.path.join(oss_fuzz_checkout.OSS_FUZZ_DIR, + 'projects', + generated_oss_fuzz_project) + updated_build_script = headerfiles.get_build_script(self.benchmark.project, "/build_install_dir") + with open(os.path.join(generated_project_path, 'update_build_script.tmp'), 'w') as file: + file.write(updated_build_script) + + # Generate the command to insert the updated script at the beginning of build.sh + docker_command = f""" + COPY update_build_script.tmp $SRC/update_build_script.tmp + RUN cat $SRC/update_build_script.tmp $SRC/build.sh > $SRC/build.sh.tmp && \ + mv $SRC/build.sh.tmp $SRC/build.sh && \ + rm $SRC/update_build_script.tmp + """ + + with open(os.path.join(generated_project_path, 'Dockerfile'), 'a') as file: + file.write(docker_command) + def extend_build_with_corpus(self, ai_binary, target_path, generated_oss_fuzz_project): """Extends an OSS-Fuzz project with corpus generated programmatically.""" @@ -350,6 +376,9 @@ def check_target(self, ai_binary, target_path: str) -> Result: # TODO: Log build failure. # TODO: Log run success/failure. + if HEADERFILES: + self.update_build_with_headerfiles_installation(generated_oss_fuzz_project) + if GENERATE_CORPUS: self.extend_build_with_corpus(ai_binary, target_path, generated_oss_fuzz_project) diff --git a/headerfiles/.gitignore b/headerfiles/.gitignore new file mode 100644 index 0000000000..9e34841361 --- /dev/null +++ b/headerfiles/.gitignore @@ -0,0 +1,27 @@ +__pycache__ +*.pyc +*.swp +venv + +# egg-info +*.egg-info/ + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST diff --git a/headerfiles/DEV.md b/headerfiles/DEV.md new file mode 100644 index 0000000000..9e84eec4dd --- /dev/null +++ b/headerfiles/DEV.md @@ -0,0 +1,13 @@ +# Dev Usage + +```bash +python3 -m venv venv +source venv/bin/activate +pip install -e .[dev] +headerfiles-cli --help +#... +headerfiles-cli supp libpsl +headerfiles-cli infer libpsl +#... +pip uninstall headerfiles -y +``` diff --git a/headerfiles/LICENSE b/headerfiles/LICENSE new file mode 100644 index 0000000000..7a4a3ea242 --- /dev/null +++ b/headerfiles/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/headerfiles/MANIFEST.in b/headerfiles/MANIFEST.in new file mode 100644 index 0000000000..57ea1dd152 --- /dev/null +++ b/headerfiles/MANIFEST.in @@ -0,0 +1,5 @@ +include README.md +include LICENSE +include setup.py +graft headerfiles +prune tests \ No newline at end of file diff --git a/headerfiles/README.md b/headerfiles/README.md new file mode 100644 index 0000000000..8b7d6faebf --- /dev/null +++ b/headerfiles/README.md @@ -0,0 +1,83 @@ +# headerfiles +Header file inference tool for LLM-based fuzz driver generation to OSS-Fuzz projects. Currently, this project is for [OSS-Fuzz-Gen](https://github.com/google/oss-fuzz-gen) usage purpose and will be more general later. + +# API + +There are three APIs: + +``` +headerfiles.api + +- is_supported_proj + - Usage: Check if a projection is supported by the API. + - Return value: True if the projection is supported, False otherwise. + +- get_proj_headers + - Usage: Get the inferred headers for a specific project. + - Return value: A list of inferred headers for the project, their orders also matter. + +- get_build_script + - Usage: Get the build script for a specific project supported in OSS-FUZZ. + - Return value: The build script for the project. + +``` + +# Support List (50 projects till now) + +- [x] avahi +- [x] bind9 +- [x] bluez +- [x] brotli +- [x] capstone +- [x] coturn +- [x] croaring +- [x] igraph +- [x] kamailio +- [x] krb5 +- [x] lcms +- [x] libbpf +- [x] libcoap +- [x] libevent +- [x] libfido2 +- [x] libical +- [x] libjpeg-turbo +- [x] libpcap +- [x] librdkafka +- [x] libsndfile +- [x] libsodium +- [x] libssh +- [x] libssh2 +- [x] libtpms +- [x] libusb +- [x] libvnc +- [x] libxls +- [x] libyang +- [x] lwan +- [x] mbedtls +- [x] mdbtools +- [x] minizip +- [x] ndpi +- [x] njs +- [x] oniguruma +- [x] openexr +- [x] opusfile +- [x] picotls +- [x] pjsip +- [x] proftpd +- [x] pupnp +- [x] sleuthkit +- [x] tidy-html5 +- [x] unicorn +- [x] unit +- [x] utf8proc +- [x] vlc +- [x] w3m +- [x] wasm3 +- [x] zydis + + +# Test + +```bash +python3 -m tests.test_api +``` diff --git a/headerfiles/__init__.py b/headerfiles/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/headerfiles/headerfiles/__init__.py b/headerfiles/headerfiles/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/headerfiles/headerfiles/api.py b/headerfiles/headerfiles/api.py new file mode 100644 index 0000000000..f65e926cd2 --- /dev/null +++ b/headerfiles/headerfiles/api.py @@ -0,0 +1,84 @@ +import json +from importlib import resources +import os + +loaded = False +headerjson = None + +def __load_headerfiles(): + global loaded, headerjson + try: + #with resources.open_text('headerfiles.data', "headerfiles.json") as f: + # 获取当前脚本文件的目录 + current_dir = os.path.dirname(os.path.abspath(__file__)) + + # 构造 data 目录下 headerfiles.json 文件的完整路径 + file_path = os.path.join(current_dir, 'data', 'headerfiles.json') + + # 打开并加载 JSON 文件 + with open(file_path, 'r', encoding='utf-8') as f: + headerjson = json.load(f) + + except FileNotFoundError: + print("ERROR: headerfiles.json not found") + headerjson = {} + loaded = True + +def is_supported_proj(proj: str) -> bool: + """ + API function `is_supported_proj` + - Usage: Check if a projection is supported by the API. + - Return value: True if the projection is supported, False otherwise. + """ + global loaded, headerjson + if not loaded: + __load_headerfiles() + return set(headerjson.keys()) + +def get_proj_headers(proj: str) -> list[str]: + """ + API function `get_proj_headers` + - Usage: Get the inferred headers for a specific project. + - Return value: A list of inferred headers for the project, their orders also matter. + """ + global loaded, headerjson + if not loaded: + __load_headerfiles() + if proj not in headerjson: + return [] + return headerjson[proj]["headers"] + +def get_build_script(proj: str, install_dir: str) -> str: + """ + API function `get_build_script` + - Usage: Get the build script for a specific project supported in OSS-FUZZ. + - Return value: The build script for the project. + """ + global loaded, headerjson + if not loaded: + __load_headerfiles() + + script = [ "# Begin of build script from headerfiles" ] + script.append(f"export HEADERFILES_CUSTOM_INSTALL_DIR=\"{install_dir}\"") + if proj in headerjson: + script.append(f"mkdir -p {install_dir}/include") + script.append(f"mkdir -p {install_dir}/lib") + + # Initialize variables to avoid "unbound variable" errors + script.append("export CFLAGS=\"${CFLAGS:-}\"") + script.append("export CXXFLAGS=\"${CXXFLAGS:-}\"") + script.append("export LDFLAGS=\"${LDFLAGS:-}\"") + + # Append new flags to existing ones if they are already set + script.append(f"export CFLAGS=\"$CFLAGS -I{install_dir}/include\"") + script.append(f"export CXXFLAGS=\"$CXXFLAGS -I{install_dir}/include\"") + script.append(f"export LDFLAGS=\"$LDFLAGS -L{install_dir}/lib\"") + + # script.append(f"export CFLAGS=\" -I{install_dir}/include\" ") + # script.append(f"export CXXFLAGS=\" -I{install_dir}/include\" ") + # script.append(f"export LDFLAGS=\" -I{install_dir}/lib\" ") + + script.extend(headerjson[proj].get("build", [])) + script.append("# End of build script from headerfiles") + + return "\n".join(script) + "\n" diff --git a/headerfiles/headerfiles/cli.py b/headerfiles/headerfiles/cli.py new file mode 100644 index 0000000000..cdbdad6a1e --- /dev/null +++ b/headerfiles/headerfiles/cli.py @@ -0,0 +1,28 @@ +import click +import json + +from .api import is_supported_proj, get_proj_headers + +@click.group() +def cli(): + pass + +@click.command(name='is_supported_proj') +@click.argument('proj') +def command_is_supported_proj(proj: str): + """Command for is_supported_proj API""" + result = is_supported_proj(proj) + click.echo(f"{result}") + +@click.command(name='get_proj_headers') +@click.argument('proj') +def command_get_proj_headers(proj: str): + """Command for get_proj_headers API""" + result = get_proj_headers(proj) + click.echo(json.dumps(result, indent=2)) + +cli.add_command(command_is_supported_proj, name='supp') +cli.add_command(command_get_proj_headers, name='infer') + +if __name__ == "__main__": + cli() diff --git a/headerfiles/headerfiles/data/headerfiles.json b/headerfiles/headerfiles/data/headerfiles.json new file mode 100644 index 0000000000..ce59189109 --- /dev/null +++ b/headerfiles/headerfiles/data/headerfiles.json @@ -0,0 +1,1938 @@ +{ + "avahi": { + "headers": [ + "assert.h", + "sys/socket.h", + "avahi-common/address.h", + "avahi-common/error.h", + "avahi-common/simple-watch.h", + "avahi-core/core.h", + "avahi-core/publish.h", + "avahi-common/alternative.h", + "avahi-common/gccmacro.h", + "avahi-common/strlst.h", + "avahi-core/dns.h", + "avahi-core/rr.h", + "avahi-common/cdecl.h", + "avahi-common/llist.h", + "avahi-common/thread-watch.h", + "avahi-core/hashmap.h", + "avahi-common/defs.h", + "avahi-common/malloc.h", + "avahi-common/timeval.h", + "avahi-core/log.h", + "avahi-common/domain.h", + "avahi-common/rlist.h", + "avahi-common/watch.h", + "avahi-core/lookup.h" + ], + "build": [ + "#!/bin/bash", + "", + "set -eux", + "", + "# Default flags for compilation", + "flags=\"-O1 -fno-omit-frame-pointer -g -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=address,undefined\"", + "", + "export CC=${CC:-clang}", + "export CFLAGS=${CFLAGS:-$flags}", + "", + "export CXX=${CXX:-clang++}", + "export CXXFLAGS=${CXXFLAGS:-$flags}", + "", + "# Navigate to the Avahi project root directory", + "cd $SRC/avahi", + "", + "# Update package lists and install dependencies", + "apt-get update", + "apt-get install -y autoconf gettext libtool m4 automake pkg-config libexpat-dev", + "", + "# Additional dependencies for i386 architecture", + "if [[ \"$ARCHITECTURE\" == i386 ]]; then", + " apt-get install -y libexpat-dev:i386", + "fi", + "", + "# Additional undefined behavior sanitizer checks", + "if [[ \"$SANITIZER\" == undefined ]]; then", + " additional_ubsan_checks=pointer-overflow,alignment", + " UBSAN_FLAGS=\"-fsanitize=$additional_ubsan_checks -fno-sanitize-recover=$additional_ubsan_checks\"", + " CFLAGS=\"$CFLAGS $UBSAN_FLAGS\"", + " CXXFLAGS=\"$CXXFLAGS $UBSAN_FLAGS\"", + "fi", + "", + "# Disable consistency checks in pthread configuration", + "sed -i 's/check_inconsistencies=yes/check_inconsistencies=no/' common/acx_pthread.m4", + "", + "# Generate configuration scripts and configure the project", + "if ! ./autogen.sh \\", + " --disable-stack-protector --disable-qt3 --disable-qt4 --disable-qt5 --disable-gtk \\", + " --disable-gtk3 --disable-dbus --disable-gdbm --disable-libdaemon --disable-python \\", + " --disable-manpages --disable-mono --disable-monodoc --disable-glib --disable-gobject \\", + " --disable-libevent --disable-libsystemd \\", + " --prefix=\"$HEADERFILES_CUSTOM_INSTALL_DIR\"; then", + " cat config.log", + " exit 1", + "fi", + "", + "# Compile the project using all available processors", + "make V=1", + "", + "# Install the compiled project to the custom install directory", + "make install", + "", + "make clean", + "cd -", + "# The header files and libraries should now be installed in ${HEADERFILES_CUSTOM_INSTALL_DIR}", + "echo \"Avahi has been installed to ${HEADERFILES_CUSTOM_INSTALL_DIR}\"" + ] + }, + "bind9": { + "headers": [ + "dns/acl.h", + "dns/adb.h", + "dns/badcache.h", + "dns/bit.h", + "dns/byaddr.h", + "dns/cache.h", + "dns/callbacks.h", + "dns/catz.h", + "dns/cert.h", + "dns/client.h", + "dns/clientinfo.h", + "dns/compress.h", + "dns/db.h", + "dns/dbiterator.h", + "dns/diff.h", + "dns/dispatch.h", + "dns/dlz.h", + "dns/dlz_dlopen.h", + "dns/dns64.h", + "dns/dnssec.h", + "dns/dnstap.h", + "dns/ds.h", + "dns/dsdigest.h", + "dns/dyndb.h", + "dns/ecs.h", + "dns/edns.h", + "dns/fixedname.h", + "dns/forward.h", + "dns/geoip.h", + "dns/ipkeylist.h", + "dns/iptable.h", + "dns/journal.h", + "dns/kasp.h", + "dns/keydata.h", + "dns/keyflags.h", + "dns/keymgr.h", + "dns/keystore.h", + "dns/keytable.h", + "dns/keyvalues.h", + "dns/master.h", + "dns/masterdump.h", + "dns/message.h", + "dns/name.h", + "dns/nametree.h", + "dns/ncache.h", + "dns/nsec.h", + "dns/nsec3.h", + "dns/nta.h", + "dns/opcode.h", + "dns/order.h", + "dns/peer.h", + "dns/private.h", + "dns/qp.h", + "dns/rbt.h", + "dns/rcode.h", + "dns/rdata.h", + "dns/rdataclass.h", + "dns/rdatalist.h", + "dns/rdataset.h", + "dns/rdatasetiter.h", + "dns/rdataslab.h", + "dns/rdatatype.h", + "dns/remote.h", + "dns/request.h", + "dns/resolver.h", + "dns/result.h", + "dns/rootns.h", + "dns/rpz.h", + "dns/rriterator.h", + "dns/rrl.h", + "dns/sdlz.h", + "dns/secalg.h", + "dns/secproto.h", + "dns/skr.h", + "dns/soa.h", + "dns/ssu.h", + "dns/stats.h", + "dns/time.h", + "dns/tkey.h", + "dns/trace.h", + "dns/transport.h", + "dns/tsig.h", + "dns/ttl.h", + "dns/types.h", + "dns/update.h", + "dns/validator.h", + "dns/view.h", + "dns/xfrin.h", + "dns/zone.h", + "dns/zonekey.h", + "dns/zoneverify.h", + "dns/zt.h", + "dst/dst.h", + "dst/gssapi.h", + "irs/resconf.h", + "isc/ascii.h", + "isc/assertions.h", + "isc/async.h", + "isc/atomic.h", + "isc/attributes.h", + "isc/backtrace.h", + "isc/barrier.h", + "isc/base32.h", + "isc/base64.h", + "isc/buffer.h", + "isc/commandline.h", + "isc/condition.h", + "isc/counter.h", + "isc/dir.h", + "isc/dnsstream.h", + "isc/endian.h", + "isc/entropy.h", + "isc/errno.h", + "isc/error.h", + "isc/file.h", + "isc/fips.h", + "isc/formatcheck.h", + "isc/fuzz.h", + "isc/getaddresses.h", + "isc/hash.h", + "isc/hashmap.h", + "isc/heap.h", + "isc/helper.h", + "isc/hex.h", + "isc/histo.h", + "isc/hmac.h", + "isc/ht.h", + "isc/httpd.h", + "isc/interfaceiter.h", + "isc/iterated_hash.h", + "isc/job.h", + "isc/lang.h", + "isc/lex.h", + "isc/list.h", + "isc/log.h", + "isc/loop.h", + "isc/magic.h", + "isc/managers.h", + "isc/md.h", + "isc/mem.h", + "isc/meminfo.h", + "isc/mutex.h", + "isc/mutexblock.h", + "isc/net.h", + "isc/netaddr.h", + "isc/netmgr.h", + "isc/netscope.h", + "isc/nonce.h", + "isc/once.h", + "isc/os.h", + "isc/overflow.h", + "isc/parseint.h", + "isc/pause.h", + "isc/portset.h", + "isc/proxy2.h", + "isc/queue.h", + "isc/quota.h", + "isc/radix.h", + "isc/random.h", + "isc/ratelimiter.h", + "isc/refcount.h", + "isc/regex.h", + "isc/region.h", + "isc/result.h", + "isc/rwlock.h", + "isc/safe.h", + "isc/serial.h", + "isc/signal.h", + "isc/siphash.h", + "isc/sockaddr.h", + "isc/spinlock.h", + "isc/stats.h", + "isc/stdio.h", + "isc/stdtime.h", + "isc/strerr.h", + "isc/string.h", + "isc/symtab.h", + "isc/syslog.h", + "isc/thread.h", + "isc/tid.h", + "isc/time.h", + "isc/timer.h", + "isc/tls.h", + "isc/tm.h", + "isc/types.h", + "isc/urcu.h", + "isc/url.h", + "isc/utf8.h", + "isc/util.h", + "isc/uv.h", + "isc/work.h", + "isc/xml.h" + ], + "build": [ + "cd /src/bind9", + "autoreconf -fi", + "./configure --disable-shared --enable-static --enable-developer --without-cmocka --without-zlib --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} --enable-fuzzing=ossfuzz", + "make -C lib/isc", + "make -C lib/dns", + "make -C tests/libtest", + "make -C lib/isc install", + "make -C lib/dns install", + "make -C tests/libtest install", + "make -C lib/dns clean", + "make -C lib/isc clean", + "make -C tests/libtest clean", + "cd -" + ] + }, + "bluez": { + "headers": [ + "glib.h", + "bluetooth/bluetooth.h", + "bluetooth/bnep.h", + "bluetooth/cmtp.h", + "bluetooth/hci.h", + "bluetooth/hci_lib.h", + "bluetooth/hidp.h", + "bluetooth/l2cap.h", + "bluetooth/rfcomm.h", + "bluetooth/sco.h", + "bluetooth/sdp.h", + "bluetooth/sdp_lib.h", + "bluetooth/uuid.h", + "gobex/gobex-apparam.h", + "gobex/gobex-debug.h", + "gobex/gobex-defs.h", + "gobex/gobex-header.h", + "gobex/gobex-packet.h", + "gobex/gobex.h", + "src/adapter.h", + "src/adv_monitor.h", + "src/advertising.h", + "src/agent.h", + "src/backtrace.h", + "src/battery.h", + "src/btd.h", + "src/dbus-common.h", + "src/device.h", + "src/eir.h", + "src/error.h", + "src/gatt-client.h", + "src/gatt-database.h", + "src/log.h", + "src/oui.h", + "src/plugin.h", + "src/profile.h", + "src/sdp-client.h", + "src/sdp-xml.h", + "src/sdpd.h", + "src/service.h", + "src/set.h", + "src/settings.h", + "src/storage.h", + "src/textfile.h", + "src/uuid-helper.h" + ], + "build": [ + "cd /src/bluez", + "autoreconf -fi", + "./configure --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} --enable-library", + "make install", + "make clean", + "cd -" + ] + }, + "brotli": { + "headers": [ + "brotli/decode.h", + "brotli/encode.h", + "brotli/port.h", + "brotli/shared_dictionary.h", + "brotli/types.h" + ], + "build": [ + "cd /src/brotli", + "cmake . -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=OFF --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make -j$(nproc) brotlidec", + "make -j$(nproc) install", + "make clean", + "cd -" + ] + }, + "capstone": { + "headers": [ + "capstone/capstone.h" + ], + "build": [ + "cd /src/capstonenext", + "mkdir build1", + "cd build1", + "cmake -DCAPSTONE_BUILD_SHARED=0 --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} ..", + "make -j$(nproc) install", + "make clean" + ] + }, + "coturn": { + "headers": [ + "stdio.h", + "string.h", + "stdlib.h", + "fcntl.h", + "apputils.h", + "ns_turn_utils.h", + "stun_buffer.h", + "ns_turn_server.h", + "ns_turn_msg_addr.h" + ], + "build": [ + "mkdir -p /src/coturn/my_build", + "cd /src/coturn/my_build", + "cmake -DFUZZER=ON -DLIB_FUZZING_ENGINE=\"$LIB_FUZZING_ENGINE\" -DCMAKE_EXE_LINKER_FLAGS=\"-Wl,-rpath,'\\$ORIGIN/lib'\" -DWITH_MYSQL=OFF -Wno-dev --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} ../.", + "make install", + "make clean", + "cd -", + "rm -rf /src/coturn/my_build", + "export CFLAGS=\"${CFLAGS} -I${HEADERFILES_CUSTOM_INSTALL_DIR}/include/turn -I${HEADERFILES_CUSTOM_INSTALL_DIR}/include/turn/client -I${HEADERFILES_CUSTOM_INSTALL_DIR}/include/turn/server \"" + ] + }, + "croaring": { + "headers": [ + "stdarg.h", + "stddef.h", + "setjmp.h", + "assert.h" + ], + "build": [ + "mkdir build-dir && cd build-dir", + "cmake -DENABLE_ROARING_TESTS=OFF --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} ..", + "make -j$(nproc)", + "make install", + "make clean", + "cd ..", + "rm -rf build-dir" + ] + }, + "dovecot": { + "headers": [ + "stdbool.h" + ], + "build": [ + "./autogen.sh", + "./configure PANDOC=false --with-fuzzer=clang --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make install", + "make clean" + ] + }, + "igraph": { + "headers": [ + "igraph/igraph.h" + ], + "build": [ + "mkdir -p /src/igraph/build", + "cd /src/igraph/build", + "cmake .. -DIGRAPH_WARNINGS_AS_ERRORS=OFF -DCMAKE_BUILD_TYPE=None -DCMAKE_PREFIX_PATH=$DEPS_PATH -DFLEX_KEEP_LINE_NUMBERS=ON --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make install", + "make clean", + "cd -" + ] + }, + "inchi": { + "headers": [ + "ichi.h", + "inchi_api.h", + "inchi_gui.h", + "inchicmp.h", + "ichi_bns.h", + "ichi_io.h", + "ichicano.h", + "ichicant.h", + "ichicomn.h", + "ichicomp.h", + "ichidrp.h", + "ichierr.h", + "ichimain.h", + "ichimake.h", + "ichinorm.h", + "ichiring.h", + "ichirvrs.h", + "ichisize.h", + "ichister.h", + "ichitaut.h", + "ichitime.h", + "ikey_base26.h", + "extr_ct.h", + "incomdef.h", + "inpdef.h", + "ixa.h", + "mode.h", + "mol_fmt.h", + "readinch.h", + "sha2.h", + "strutil.h", + "util.h", + "ixa_mol.h", + "ixa_status.h", + "inchi_dll.h", + "inchi_dll_a.h", + "inchi_dll_b.h", + "inchi_dll_main.h" + ], + "build": [] + }, + "kamailio": { + "headers": [ + "hf.h", + "keys.h", + "msg_parser.h", + "parse_addr_spec.h", + "parse_allow.h", + "parse_body.h", + "parse_content.h", + "parse_cseq.h", + "parse_date.h", + "parse_def.h", + "parse_disposition.h", + "parse_diversion.h", + "parse_event.h", + "parse_expires.h", + "parse_fline.h", + "parse_from.h", + "parse_hname2.h", + "parse_identity.h", + "parse_identityinfo.h", + "parse_methods.h", + "parse_nameaddr.h", + "parse_option_tags.h", + "parse_param.h", + "parse_ppi_pai.h", + "parse_privacy.h", + "parse_refer_to.h", + "parse_require.h", + "parse_retry_after.h", + "parse_rpid.h", + "parse_rr.h", + "parse_sipifmatch.h", + "parse_subscription_state.h", + "parse_supported.h", + "parse_to.h", + "parse_uri.h", + "parse_via.h", + "parser_f.h" + ], + "build": [] + }, + "krb5": { + "headers": [ + "com_err.h", + "kdb.h", + "krad.h", + "krb5.h", + "profile.h", + "verto-module.h", + "verto.h", + "gssapi.h", + "gssapi/gssapi.h", + "gssapi/gssapi_alloc.h", + "gssapi/gssapi_ext.h", + "gssapi/gssapi_generic.h", + "gssapi/gssapi_krb5.h", + "gssapi/mechglue.h", + "gssrpc/types.h", + "gssrpc/auth.h", + "gssrpc/auth_gss.h", + "gssrpc/auth_gssapi.h", + "gssrpc/auth_unix.h", + "gssrpc/clnt.h", + "gssrpc/netdb.h", + "gssrpc/pmap_clnt.h", + "gssrpc/pmap_prot.h", + "gssrpc/pmap_rmt.h", + "gssrpc/rename.h", + "gssrpc/rpc.h", + "gssrpc/rpc_msg.h", + "gssrpc/svc.h", + "gssrpc/svc_auth.h", + "gssrpc/xdr.h", + "kadm5/admin.h", + "kadm5/chpass_util_strings.h", + "kadm5/kadm_err.h", + "krb5/krb5.h", + "krb5/ccselect_plugin.h", + "krb5/certauth_plugin.h", + "krb5/clpreauth_plugin.h", + "krb5/hostrealm_plugin.h", + "krb5/kadm5_auth_plugin.h", + "krb5/kadm5_hook_plugin.h", + "krb5/kdcpolicy_plugin.h", + "krb5/kdcpreauth_plugin.h", + "krb5/localauth_plugin.h", + "krb5/locate_plugin.h", + "krb5/plugin.h", + "krb5/preauth_plugin.h", + "krb5/pwqual_plugin.h" + ], + "build": [ + "pushd src/", + "autoreconf", + "./configure CFLAGS=\"-fcommon $CFLAGS\" CXXFLAGS=\"-fcommon $CXXFLAGS\" --enable-static --disable-shared --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make", + "make install", + "make clean", + "popd" + ] + }, + "lcms": { + "headers": [ + "lcms2.h" + ], + "build": [ + "cd /src/lcms", + "./configure --enable-shared=no --enable-static --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make install", + "make clean", + "cd -" + ] + }, + "libarchive": { + "headers": [ + "assert.h", + "archive.h", + "archive_entry.h" + ], + "build": [ + "cd $SRC/libarchive", + "mkdir build3", + "cd build3", + "cmake -DCHECK_CRC_ON_SOLID_SKIP=1 -DDONT_FAIL_ON_CRC_ERROR=1 --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} ../", + "make install", + "make clean", + "cd -" + ] + }, + "libbpf": { + "headers": [ + "errno.h", + "linux/types.h", + "stdbool.h", + "bpf/bpf.h", + "bpf/btf.h", + "bpf/libbpf.h", + "bpf/bpf_endian.h", + "bpf/libbpf_common.h", + "bpf/libbpf_legacy.h", + "bpf/libbpf_version.h", + "bpf/skel_internal.h" + ], + "build": [ + "set -eux", + "export CFLAGS=\"${CFLAGS} -I${HEADERFILES_CUSTOM_INSTALL_DIR}/usr/include \"", + "export CXXFLAGS=\"${CXXFLAGS} -I${HEADERFILES_CUSTOM_INSTALL_DIR}/usr/include \"", + "export LDFLAGS=\"${LDFLAGS} -L${HEADERFILES_CUSTOM_INSTALL_DIR}/usr/lib64 -lbpf \"", + "SANITIZER=${SANITIZER:-address}", + "flags=\"-O1 -fno-omit-frame-pointer -g -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=$SANITIZER -fsanitize=fuzzer-no-link\"", + "export CC=${CC:-clang}", + "export CFLAGS=${CFLAGS:-$flags}", + "export CXX=${CXX:-clang++}", + "export CXXFLAGS=${CXXFLAGS:-$flags}", + "pushd $SRC/libbpf", + "export OUT=${OUT:-\"$(pwd)/out\"}", + "mkdir -p \"$OUT\"", + "export LIB_FUZZING_ENGINE=${LIB_FUZZING_ENGINE:--fsanitize=fuzzer}", + "# libelf is compiled with _FORTIFY_SOURCE by default and it", + "# isn't compatible with MSan. It was borrowed", + "# from https://github.com/google/oss-fuzz/pull/7422", + "if [[ \"$SANITIZER\" == memory ]]; then", + " CFLAGS+=\" -U_FORTIFY_SOURCE\"", + " CXXFLAGS+=\" -U_FORTIFY_SOURCE\"", + "fi", + "# The alignment check is turned off by default on OSS-Fuzz/CFLite so it should be", + "# turned on explicitly there. It was borrowed from", + "# https://github.com/google/oss-fuzz/pull/7092", + "if [[ \"$SANITIZER\" == undefined ]]; then", + " additional_ubsan_checks=alignment", + " UBSAN_FLAGS=\"-fsanitize=$additional_ubsan_checks -fno-sanitize-recover=$additional_ubsan_checks\"", + " CFLAGS+=\" $UBSAN_FLAGS\"", + " CXXFLAGS+=\" $UBSAN_FLAGS\"", + "fi", + "# Ideally libbelf should be built using release tarballs available", + "# at https://sourceware.org/elfutils/ftp/. Unfortunately sometimes they", + "# fail to compile (for example, elfutils-0.185 fails to compile with LDFLAGS enabled", + "# due to https://bugs.gentoo.org/794601) so let's just point the script to", + "# commits referring to versions of libelf that actually can be built", + "rm -rf elfutils", + "git clone https://sourceware.org/git/elfutils.git", + "(", + "cd elfutils", + "git checkout 67a187d4c1790058fc7fd218317851cb68bb087c", + "git log --oneline -1", + "# ASan isn't compatible with -Wl,--no-undefined: https://github.com/google/sanitizers/issues/380", + "sed -i 's/^\\(NO_UNDEFINED=\\).*/\\1/' configure.ac", + "# ASan isn't compatible with -Wl,-z,defs either:", + "# https://clang.llvm.org/docs/AddressSanitizer.html#usage", + "sed -i 's/^\\(ZDEFS_LDFLAGS=\\).*/\\1/' configure.ac", + "if [[ \"$SANITIZER\" == undefined ]]; then", + " # That's basicaly what --enable-sanitize-undefined does to turn off unaligned access", + " # elfutils heavily relies on on i386/x86_64 but without changing compiler flags along the way", + " sed -i 's/\\(check_undefined_val\\)=[0-9]/\\1=1/' configure.ac", + "fi", + "autoreconf -i -f", + "if ! ./configure --enable-maintainer-mode --disable-debuginfod --disable-libdebuginfod \\", + " --disable-demangler --without-bzlib --without-lzma --without-zstd \\", + " CC=\"$CC\" CFLAGS=\"-Wno-error $CFLAGS\" CXX=\"$CXX\" CXXFLAGS=\"-Wno-error $CXXFLAGS\" LDFLAGS=\"$CFLAGS\"; then", + " cat config.log", + " exit 1", + "fi", + "make -C config -j$(nproc) V=1", + "make -C lib -j$(nproc) V=1", + "make -C libelf -j$(nproc) V=1", + "make -C config -j$(nproc) V=1 install", + "make -C lib -j$(nproc) V=1 install", + "make -C libelf -j$(nproc) V=1 install", + ")", + "make -C src BUILD_STATIC_ONLY=y V=1 clean", + "make -C src -j$(nproc) CFLAGS=\"-I$(pwd)/elfutils/libelf $CFLAGS\" BUILD_STATIC_ONLY=y V=1 OBJDIR=/src/libbpf/jarvis-build DESTDIR=${HEADERFILES_CUSTOM_INSTALL_DIR} install", + "make -C src clean", + "(", + "cd elfutils", + "make -C config -j$(nproc) V=1 clean", + "make -C lib -j$(nproc) V=1 clean", + "make -C libelf -j$(nproc) V=1 clean", + ")", + "popd" + ] + }, + "libcbor": { + "headers": [ + "cbor.h" + ], + "build": [ + "mkdir -p /src/libcbor/nbuild", + "cd /src/libcbor/nbuild", + "cmake -D CMAKE_BUILD_TYPE=Debug -D CMAKE_INSTALL_PREFIX=${HEADERFILES_CUSTOM_INSTALL_DIR} -D SANITIZE=OFF ..", + "make ", + "make install", + "make clean", + "cd -" + ] + }, + "libcoap": { + "headers": [ + "coap3/coap.h" + ], + "build": [ + "export LDFLAGS=\"${LDFLAGS} -lpthread \"", + "pushd /src/libcoap", + "./autogen.sh", + "./configure --disable-doxygen --disable-manpages --disable-dtls --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make install", + "make clean", + "popd" + ] + }, + "libdwarf": { + "headers": [ + "fcntl.h" + ], + "build": [ + "mkdir -p /src/libdwarf/build", + "cd /src/libdwarf/build", + "cmake --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} ..", + "make install", + "make clean", + "cd -", + "rm -rf /src/libdwarf/build" + ] + }, + "libevent": { + "headers": [ + "event.h", + "evdns.h", + "event2/dns.h", + "evhttp.h", + "evrpc.h", + "evutil.h", + "event2/buffer.h", + "event2/dns_compat.h", + "event2/http.h", + "event2/rpc_compat.h", + "event2/visibility.h", + "event2/buffer_compat.h", + "event2/dns_struct.h", + "event2/http_compat.h", + "event2/rpc_struct.h", + "event2/watch.h", + "event2/bufferevent.h", + "event2/event-config.h", + "event2/http_struct.h", + "event2/tag.h", + "event2/ws.h", + "event2/bufferevent_compat.h", + "event2/event.h", + "event2/keyvalq_struct.h", + "event2/tag_compat.h", + "event2/bufferevent_struct.h", + "event2/event_compat.h", + "event2/listener.h", + "event2/thread.h", + "event2/event_struct.h", + "event2/rpc.h", + "event2/util.h" + ], + "build": [ + "mkdir -p /src/libevent/build1", + "cd /src/libevent/build1", + "cmake -DEVENT__DISABLE_MBEDTLS=ON \\", + " -DEVENT__DISABLE_OPENSSL=ON \\", + " -DEVENT__LIBRARY_TYPE=STATIC \\", + " -DEVENT__DISABLE_TESTS=ON \\", + " -DEVENT__DISABLE_SAMPLES=ON \\", + " --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} ../", + "make", + "make install", + "make clean", + "cd -" + ] + }, + "libexif": { + "headers": [ + "assert.h", + "libexif/exif-data-type.h", + "libexif/exif-format.h", + "libexif/exif-log.h", + "libexif/exif-tag.h", + "libexif/exif-byte-order.h", + "libexif/exif-data.h", + "libexif/exif-ifd.h", + "libexif/exif-mem.h", + "libexif/exif-utils.h", + "libexif/exif-content.h", + "libexif/exif-entry.h", + "libexif/exif-loader.h", + "libexif/exif-mnote-data.h" + ], + "build": [] + }, + "libfido2": { + "headers": [ + "cbor.h", + "zconf.h", + "zlib.h", + "fido.h" + ], + "build": [] + }, + "libfuse": { + "headers": [ + "fuse.h", + "fuse_lowlevel.h", + "fuse_i.h", + "fuse_misc.h", + "fuse_kernel.h", + "mount_util.h", + "fuse_mount_compat.h", + "cuse_lowlevel.h" + ], + "build": [] + }, + "libgd": { + "headers": [ + "gd.h", + "gd_color_map.h", + "gd_errors.h", + "gd_io.h", + "gdcache.h", + "gdfontg.h", + "gdfontl.h", + "gdfontmb.h", + "gdfonts.h", + "gdfontt.h", + "gdfx.h", + "gdpp.h" + ], + "build": [] + }, + "libical": { + "headers": [ + "libical/ical.h", + "libical/icalarray.h", + "libical/icalattach.h", + "libical/icalcalendar.h", + "libical/icalclassify.h", + "libical/icalcluster.h", + "libical/icalcomponent.h", + "libical/icalderivedparameter.h", + "libical/icalderivedproperty.h", + "libical/icalderivedvalue.h", + "libical/icaldirset.h", + "libical/icaldirsetimpl.h", + "libical/icalduration.h", + "libical/icalenums.h", + "libical/icalerror.h", + "libical/icalfileset.h", + "libical/icalfilesetimpl.h", + "libical/icalgauge.h", + "libical/icalgaugeimpl.h", + "libical/icallangbind.h", + "libical/icalmemory.h", + "libical/icalmessage.h", + "libical/icalmime.h", + "libical/icalparameter.h", + "libical/icalparser.h", + "libical/icalperiod.h", + "libical/icalproperty.h", + "libical/icalrecur.h", + "libical/icalrestriction.h", + "libical/icalset.h", + "libical/icalspanlist.h", + "libical/icalss.h", + "libical/icalssyacc.h", + "libical/icaltime.h", + "libical/icaltimezone.h", + "libical/icaltypes.h", + "libical/icaltz-util.h", + "libical/icalvcal.h", + "libical/libical_ical_export.h", + "libical/libical_icalss_export.h", + "libical/libical_vcal_export.h", + "libical/pvl.h", + "libical/sspm.h", + "libical/vcaltmp.h", + "libical/vcc.h", + "libical/vobject.h" + ], + "build": [ + "cmake . -DSTATIC_ONLY=ON -DICAL_GLIB=False --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make install", + "make clean", + "cmake . -DSTATIC_ONLY=ON -DICAL_GLIB=False --install-prefix=/usr/local", + "make install", + "make clean" + ] + }, + "libjpeg-turbo": { + "headers": [ + + ], + "build": [ + "# build.sh have already done `make install`" + ] + }, + "libpcap": { + "headers": [ + "pcap-bpf.h", + "pcap-namedb.h", + "pcap.h" + ], + "build": [ + "mkdir -p /src/libpcap/build1", + "cd /src/libpcap/build1", + "cmake --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} ..", + "make install", + "make clean", + "cd -" + ] + }, + "librdkafka": { + "headers": [ + "rdkafka.h", + "regexp.h" + ], + "build": [ + "mkdir -p /src/librdkafka/build1", + "cd /src/librdkafka/build1", + "cmake --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} -DRDKAFKA_BUILD_STATIC=ON -DRDKAFKA_BUILD_EXAMPLES=OFF -DHAVE_REGEX=OFF ../", + "make install", + "make clean", + "cd -" + ] + }, + "libredwg": { + "headers": [ + "dwg.h", + "dwg_api.h" + ], + "build": [ + "cd $SRC/libredwg", + "sh autogen.sh", + "./configure --disable-shared --disable-bindings --enable-release --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make install", + "make clean", + "cd -" + ] + }, + "libressl": { + "headers": [ + "tls.h", + "openssl/aes.h", + "openssl/conf.h", + "openssl/engine.h", + "openssl/objects.h", + "openssl/rc4.h", + "openssl/tls1.h", + "openssl/asn1.h", + "openssl/conf_api.h", + "openssl/err.h", + "openssl/ocsp.h", + "openssl/ripemd.h", + "openssl/ts.h", + "openssl/asn1t.h", + "openssl/crypto.h", + "openssl/evp.h", + "openssl/opensslconf.h", + "openssl/rsa.h", + "openssl/txt_db.h", + "openssl/bio.h", + "openssl/ct.h", + "openssl/gost.h", + "openssl/opensslfeatures.h", + "openssl/safestack.h", + "openssl/ui.h", + "openssl/blowfish.h", + "openssl/curve25519.h", + "openssl/hkdf.h", + "openssl/opensslv.h", + "openssl/sha.h", + "openssl/ui_compat.h", + "openssl/bn.h", + "openssl/des.h", + "openssl/hmac.h", + "openssl/ossl_typ.h", + "openssl/sm3.h", + "openssl/whrlpool.h", + "openssl/buffer.h", + "openssl/dh.h", + "openssl/idea.h", + "openssl/pem.h", + "openssl/sm4.h", + "openssl/x509.h", + "openssl/camellia.h", + "openssl/dsa.h", + "openssl/kdf.h", + "openssl/pem2.h", + "openssl/srtp.h", + "openssl/x509_verify.h", + "openssl/cast.h", + "openssl/dso.h", + "openssl/lhash.h", + "openssl/pkcs12.h", + "openssl/ssl.h", + "openssl/x509_vfy.h", + "openssl/chacha.h", + "openssl/dtls1.h", + "openssl/md4.h", + "openssl/pkcs7.h", + "openssl/ssl2.h", + "openssl/x509v3.h", + "openssl/cmac.h", + "openssl/ec.h", + "openssl/md5.h", + "openssl/poly1305.h", + "openssl/ssl23.h", + "openssl/cms.h", + "openssl/ecdh.h", + "openssl/modes.h", + "openssl/rand.h", + "openssl/ssl3.h", + "openssl/comp.h", + "openssl/ecdsa.h", + "openssl/obj_mac.h", + "openssl/rc2.h", + "openssl/stack.h" + ], + "build": [ + "cd /src/libressl", + "cmake -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX \\", + " -DCMAKE_C_FLAGS=\"$CFLAGS\" -DCMAKE_CXX_FLAGS=\"$CXXFLAGS\" \\", + " $CMAKE_DEFINES --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} $SRC/libressl/", + "make install", + "make clean", + "cd -" + ] + }, + "libsndfile": { + "headers": [ + "sndfile.h" + ], + "build": [ + "apt-get update", + "apt-get -y install autoconf autogen automake libtool pkg-config python", + "cd $SRC/libsndfile", + "autoreconf -vif", + "./configure --disable-shared --enable-ossfuzzers --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make V=1 install", + "make distclean", + "cd -" + ] + }, + "libsodium": { + "headers": [ + "sodium.h" + ], + "build": [ + "cd /src/libsodium", + "./configure --enable-static LDFLAGS=\"$LDFLAGS $CXXFLAGS\" --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make install", + "make clean", + "cd -" + ] + }, + "libsrtp": { + "headers": [ + "srtp2/crypto_types.h", + "srtp2/auth.h", + "srtp2/cipher.h", + "srtp2/srtp.h" + ], + "build": [ + "cd /src/libsrtp", + "autoreconf -ivf", + "./configure --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make install", + "make clean", + "cd -" + ] + }, + "libssh": { + "headers": [ + "libssh/ssh2.h", + "libssh/libssh.h", + "libssh/server.h", + "libssh/sftp.h", + "libssh/callbacks.h" + ], + "build": [ + "export LDFLAGS=\"${LDFLAGS} -lpthread \"", + "mkdir -p /tmp/build", + "cd /tmp/build", + "cmake -DCMAKE_C_COMPILER=\"$CC\" -DCMAKE_CXX_COMPILER=\"$CXX\" \\", + " -DCMAKE_C_FLAGS=\"$CFLAGS\" -DCMAKE_CXX_FLAGS=\"$CXXFLAGS\" \\", + " -DBUILD_SHARED_LIBS=OFF -DWITH_INSECURE_NONE=ON\\", + " --install-prefix ${HEADERFILES_CUSTOM_INSTALL_DIR} $SRC/libssh", + "make", + "make install", + "make clean", + "cd -" + ] + }, + "libssh2": { + "headers": [ + "libssh2.h", + "libssh2_publickey.h", + "libssh2_sftp.h" + ], + "build": [ + "apt-get update", + "apt-get -y install automake libtool libssl-dev zlib1g-dev", + "autoreconf -fi", + "./configure --disable-shared --enable-ossfuzzers --disable-examples-build --enable-debug --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make", + "make install", + "make clean" + ] + }, + "libtasn1": { + "headers": [ + "libtasn1.h" + ], + "build": [] + }, + "libtpms": { + "headers": [ + "libtpms/tpm_error.h", + "libtpms/tpm_library.h", + "libtpms/tpm_memory.h", + "libtpms/tpm_nvfilename.h", + "libtpms/tpm_tis.h", + "libtpms/tpm_types.h" + ], + "build": [ + "cd /src/libtpms", + "autoreconf -vfi", + "./configure --disable-shared --enable-static --with-openssl --with-tpm2 --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make install", + "make distclean", + "cd -" + ] + }, + "libusb": { + "headers": [ + "assert.h", + "libusb/libusb.h" + ], + "build": [ + "cd /src/libusb", + "./autogen.sh", + "./configure --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make", + "make install", + "make clean", + "cd -" + ] + }, + "libvips": { + "headers": [ + "vips/vips.h" + ], + "build": [] + }, + "libvnc": { + "headers": [ + "rfb/rfb.h", + "rfb/rfbclient.h", + "rfb/rfbregion.h", + "sys/types.h", + "base64.h", + "crypto.h", + "d3des.h", + "lzoconf.h", + "lzodefs.h", + "minilzo.h", + "sha-private.h", + "sha.h", + "sockets.h", + "turbojpeg.h" + ], + "build": [] + }, + "libwebsockets": { + "headers": [ + "lws_config.h", + "libwebsockets.h" + ], + "build": [ + "mkdir -p /tmp/mybuild", + "cd /tmp/mybuild", + "cmake -DCMAKE_C_FLAGS=\"$CFLAGS\" -DCMAKE_CXX_FLAGS=\"$CXXFLAGS\" \\", + " -DCMAKE_EXE_LINKER_FLAGS=\"$CFLAGS\" -DCMAKE_SHARED_LINKER_FLAGS=\"$CFLAGS\" --install-prefix ${HEADERFILES_CUSTOM_INSTALL_DIR} ..", + "make install", + "make clean", + "cd -" + ] + }, + "libxls": { + "headers": [ + "locale.h", + "xls.h" + ], + "build": [ + "if [ -f ./autogen.sh ]; then", + "./autogen.sh", + "else", + "./bootstrap", + "fi", + "./configure --enable-static --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make install", + "make clean" + ] + }, + "libyang": { + "headers": [ + "libyang/libyang.h", + "libyang/hash_table.h", + "libyang/plugins_types.h", + "libyang/version.h" + ], + "build": [ + "pushd libyang", + "git checkout devel", + "mkdir -p build1", + "cd build1", + "cmake -DENABLE_STATIC=ON --install-prefix ${HEADERFILES_CUSTOM_INSTALL_DIR} ../", + "make install", + "make clean", + "popd" + ] + }, + "lua": { + "headers": [ + "lapi.h", + "lauxlib.h", + "lcode.h", + "lctype.h", + "ldebug.h", + "ldo.h", + "lfunc.h", + "lgc.h", + "llex.h", + "llimits.h", + "lmem.h", + "lobject.h", + "lopcodes.h", + "lopnames.h", + "lparser.h", + "lprefix.h", + "lstate.h", + "lstring.h", + "ltable.h", + "ltests.h", + "ltm.h", + "lua.h", + "luaconf.h", + "lualib.h", + "lundump.h", + "lvm.h", + "lzio.h" + ], + "build": [] + }, + "lwan": { + "headers": [ + "lwan/lwan.h", + "lwan/lwan-build-config.h", + "lwan/lwan-mod-lua.h", + "lwan/lwan-mod-redirect.h", + "lwan/lwan-mod-response.h", + "lwan/lwan-mod-rewrite.h", + "lwan/lwan-mod-serve-files.h", + "lwan/lwan-template.h" + ], + "build": [ + "mkdir -p /tmp/build", + "cd /tmp/build", + "cmake -GNinja --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} $SRC/lwan", + "ninja -v liblwan.a", + "ninja -v install", + "cd -" + ] + }, + "mbedtls": { + "headers": [ + "mbedtls/aes.h", + "mbedtls/aria.h", + "mbedtls/asn1.h", + "mbedtls/asn1write.h", + "mbedtls/base64.h", + "mbedtls/block_cipher.h", + "mbedtls/camellia.h", + "mbedtls/ccm.h", + "mbedtls/chacha20.h", + "mbedtls/chachapoly.h", + "mbedtls/check_config.h", + "mbedtls/cipher.h", + "mbedtls/cmac.h", + "mbedtls/compat-2.x.h", + "mbedtls/config_adjust_legacy_crypto.h", + "mbedtls/config_adjust_legacy_from_psa.h", + "mbedtls/config_adjust_psa_from_legacy.h", + "mbedtls/config_adjust_psa_superset_legacy.h", + "mbedtls/config_adjust_ssl.h", + "mbedtls/config_adjust_x509.h", + "mbedtls/config_psa.h", + "mbedtls/constant_time.h", + "mbedtls/ctr_drbg.h", + "mbedtls/debug.h", + "mbedtls/des.h", + "mbedtls/dhm.h", + "mbedtls/ecdh.h", + "mbedtls/ecdsa.h", + "mbedtls/ecjpake.h", + "mbedtls/ecp.h", + "mbedtls/entropy.h", + "mbedtls/error.h", + "mbedtls/gcm.h", + "mbedtls/hkdf.h", + "mbedtls/hmac_drbg.h", + "mbedtls/lms.h", + "mbedtls/mbedtls_config.h", + "mbedtls/md.h", + "mbedtls/md5.h", + "mbedtls/memory_buffer_alloc.h", + "mbedtls/net_sockets.h", + "mbedtls/nist_kw.h", + "mbedtls/oid.h", + "mbedtls/pem.h", + "mbedtls/pk.h", + "mbedtls/pkcs12.h", + "mbedtls/pkcs5.h", + "mbedtls/pkcs7.h", + "mbedtls/platform.h", + "mbedtls/platform_time.h", + "mbedtls/poly1305.h", + "mbedtls/psa_util.h", + "mbedtls/ripemd160.h", + "mbedtls/rsa.h", + "mbedtls/sha1.h", + "mbedtls/sha256.h", + "mbedtls/sha3.h", + "mbedtls/sha512.h", + "mbedtls/ssl.h", + "mbedtls/ssl_cache.h", + "mbedtls/ssl_ciphersuites.h", + "mbedtls/ssl_cookie.h", + "mbedtls/ssl_ticket.h", + "mbedtls/threading.h", + "mbedtls/timing.h", + "mbedtls/version.h", + "mbedtls/x509.h", + "mbedtls/x509_crl.h", + "mbedtls/x509_crt.h", + "mbedtls/x509_csr.h", + "psa/build_info.h", + "psa/crypto.h", + "psa/crypto_adjust_auto_enabled.h", + "psa/crypto_adjust_config_dependencies.h", + "psa/crypto_adjust_config_key_pair_types.h", + "psa/crypto_adjust_config_synonyms.h", + "psa/crypto_builtin_composites.h", + "psa/crypto_builtin_key_derivation.h", + "psa/crypto_builtin_primitives.h", + "psa/crypto_compat.h", + "psa/crypto_config.h", + "psa/crypto_driver_common.h", + "psa/crypto_driver_contexts_composites.h", + "psa/crypto_driver_contexts_key_derivation.h", + "psa/crypto_driver_contexts_primitives.h", + "psa/crypto_extra.h", + "psa/crypto_legacy.h", + "psa/crypto_platform.h", + "psa/crypto_se_driver.h", + "psa/crypto_sizes.h", + "psa/crypto_struct.h", + "psa/crypto_types.h", + "psa/crypto_values.h" + ], + "build": [ + "mkdir -p /src/mbedtls/build1", + "cd /src/mbedtls/build1", + "cmake -DENABLE_TESTING=OFF --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} ..", + "make install", + "make clean", + "cd -" + ] + }, + "mdbtools": { + "headers": [ + "mdbfakeglib.h", + "mdbtools.h" + ], + "build": [ + "cd /src/mdbtools", + "autoreconf -f -i", + "./configure --enable-static --disable-man --disable-glib --disable-silent-rules --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make install", + "make clean", + "cd -" + ] + }, + "minizip": { + "headers": [ + "mz.h", + "mz_crypt.h", + "mz_strm.h", + "mz_strm_mem.h", + "mz_strm_pkcrypt.h", + "mz_strm_wzaes.h", + "mz_zip.h", + "mz_zip_rw.h", + "zip.h", + "mz_compat.h", + "mz_os.h", + "mz_strm_buf.h", + "mz_strm_os.h", + "mz_strm_split.h", + "unzip.h" + ], + "build": [ + "cd /src/minizip-ng", + "cmake . -DCMAKE_C_FLAGS=\"$CFLAGS\" -DCMAKE_CXX_FLAGS=\"$CXXFLAGS\" -DMZ_BUILD_FUZZ_TESTS=ON --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} -DCMAKE_VERBOSE_MAKEFILE=ON", + "make install", + "make clean", + "cd -" + ] + }, + "ndpi": { + "headers": [ + "ndpi_api.h", + "ndpi_classify.h", + "ndpi_encryption.h", + "ndpi_patricia_typedefs.h", + "ndpi_replace_printf.h", + "ndpi_unix.h" + ], + "build": [ + "# build libpcap", + "tar -xvzf libpcap-1.9.1.tar.gz", + "cd libpcap-1.9.1", + "./configure --disable-shared", + "make -j$(nproc)", + "make install", + "make clean", + "cd ..", + "# build project", + "cd ndpi", + "RANLIB=llvm-ranlib LDFLAGS=\"-L/usr/local/lib -lpcap\" ./autogen.sh --enable-fuzztargets --with-only-libndpi --enable-tls-sigs --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make -j$(nproc)", + "make install", + "make clean", + "cd .." + ] + }, + "netcdf": { + "headers": [ + "netcdf.h", + "netcdf_aux.h", + "netcdf_dispatch.h", + "netcdf_filter.h", + "netcdf_mem.h", + "netcdf_meta.h" + ], + "build": [ + "mkdir -p /src/netcdf-c/build1", + "cmake --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_SHARED_LIBS=OFF -DENABLE_HDF5=OFF -DENABLE_DAP=OFF ..", + "make install", + "make clean", + "cd -" + ] + }, + "njs": { + "headers": [ + "njs_main.h", + "qjs.h", + "njs_value.h" + ], + "build": [] + }, + "oniguruma": { + "headers": [ + "oniguruma.h", + "oniggnu.h" + ], + "build": [ + "cd /src/oniguruma", + "./autogen.sh", + "./configure --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make install", + "make clean", + "cd -" + ] + }, + "openexr": { + "headers": [ + "openexr.h" + ], + "build": [ + "mkdir -p /tmp/build", + "cd /tmp/build", + "CMAKE_SETTINGS=(", + " \"-D BUILD_SHARED_LIBS=OFF\" # Build static libraries only", + " \"-D BUILD_TESTING=OFF\" # Or tests", + " \"-D OPENEXR_INSTALL_EXAMPLES=OFF\" # Or examples", + " \"-D OPENEXR_LIB_SUFFIX=\" # Don't append the version number to library files", + ")", + "cmake --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} $SRC/openexr ${CMAKE_SETTINGS[@]}", + "make -j$(nproc)", + "make install", + "make clean", + "cd -", + "export CFLAGS=\"$CFLAGS -I /build_install_dir/include/Imath -I /build_install_dir/include/OpenEXR \"", + "export CXXFLAGS=\"$CXXFLAGS -I /build_install_dir/include/Imath -I /build_install_dir/include/OpenEXR \"" + ] + }, + "opusfile": { + "headers": [ + "fcntl.h", + "opus/opusfile.h" + ], + "build": [ + "./autogen.sh", + "./configure --enable-static --disable-shared --disable-doc --enable-assertions --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make", + "make install", + "ldconfig", + "make clean" + ] + }, + "ostree": { + "headers": [ + "fcntl.h", + "stdbool.h", + "ostree.h" + ], + "build": [ + "# Build glib with sanitizer support", + "cd glib", + "mkdir build", + "cd build", + "meson --prefix=/usr --buildtype=release -Db_lundef=false -Ddefault_library=static -Dlibmount=disabled", + "ninja", + "ninja install", + "cd ..", + "rm -rf build", + "# Build libostree", + "cd $SRC/ostree", + "env NOCONFIGURE=1 ./autogen.sh", + "./configure --enable-static --without-selinux --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make V=1 install", + "make clean", + "cd /src" + ] + }, + "picotls": { + "headers": [ + "picotls.h", + "picotls/asn1.h", + "picotls/ffx.h", + "picotls/minicrypto.h", + "picotls/pembase64.h", + "picotls/certificate_compression.h", + "picotls/fusion.h", + "picotls/openssl.h", + "picotls/ptlsbcrypt.h" + ], + "build": [ + "export LDFLAGS=\"${LDFLAGS} -lpthread \"", + "pushd $SRC/picotls", + "cmake --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} -DBUILD_FUZZER=ON -DOSS_FUZZ=ON .", + "make", + "make clean", + "popd" + ] + }, + "pidgin": { + "headers": [ + "purple.h" + ], + "build": [ + "# Place to keep dependencies for static linking", + "DEPS=/deps", + "mkdir -p ${DEPS}", + "# Build libffi", + "cd $SRC", + "tar xvfz libffi-3.2.1.tar.gz", + "cd libffi-3.2.1", + "./configure --disable-shared", + "make -j$(nproc)", + "export LIBFFI_LIBS=\"-L/src/libffi-3.2.1 libraries/ -lffi\"", + "cp ./x86_64-unknown-linux-gnu/.libs/libffi.a ${DEPS}/", + "# Build libxml2", + "cd $SRC/libxml2", + "./autogen.sh \\", + " --disable-shared \\", + " --without-debug \\", + " --without-ftp \\", + " --without-http \\", + " --without-legacy \\", + " --without-python", + "make -j$(nproc)", + "make install", + "cp .libs/libxml2.a ${DEPS}/", + "# Build glib", + "cd $SRC/glib", + "GLIB_BUILD=$WORK/meson", + "rm -rf $GLIB_BUILD", + "mkdir $GLIB_BUILD", + "meson $GLIB_BUILD \\", + " -Db_lundef=false \\", + " -Ddefault_library=static \\", + " -Dlibmount=disabled", + "ninja -C $GLIB_BUILD", + "ninja -C $GLIB_BUILD install", + "cp ${GLIB_BUILD}/gobject/libgobject-2.0.a ${DEPS}/", + "cp ${GLIB_BUILD}/gmodule/libgmodule-2.0.a ${DEPS}/", + "cp ${GLIB_BUILD}/glib/libglib-2.0.a ${DEPS}/", + "# Build Pidgin", + "cd $SRC", + "tar -xf pidgin-2.14.10.tar.bz2", + "mv pidgin-2.14.10 pidgin", + "cd pidgin", + "./configure --disable-consoleui \\", + " --disable-shared \\", + " --disable-screensaver \\", + " --disable-sm \\", + " --disable-gtkspell \\", + " --disable-gevolution \\", + " --enable-gnutls=no \\", + " --disable-gstreamer \\", + " --disable-vv \\", + " --disable-idn \\", + " --disable-meanwhile \\", + " --disable-avahi \\", + " --disable-dbus \\", + " --disable-perl \\", + " --disable-tcl \\", + " --disable-cyrus-sasl \\", + " --disable-gtkui \\", + " --enable-nss=no --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make -j$(nproc) install", + "make clean", + "cd /src" + ] + }, + "pjsip": { + "headers": [ + "pjlib-util.h", + "pjlib.h", + "pjmedia-codec.h", + "pjmedia.h", + "pjmedia_audiodev.h", + "pjmedia_videodev.h", + "pjnath.h", + "pjsip.h", + "pjsip_simple.h", + "pjsip_ua.h", + "pjsua.h" + ], + "build": [ + "./configure \\", + " --disable-ffmpeg --disable-ssl \\", + " --disable-speex-aec --disable-speex-codec \\", + " --disable-g7221-codec --disable-gsm-codec --disable-ilbc-codec \\", + " --disable-resample --disable-libsrtp --disable-libwebrtc --disable-libyuv --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make dep", + "make --ignore-errors", + "make install", + "make clean" + ] + }, + "proftpd": { + "headers": [ + "bindings.h", + "class.h", + "conf.h", + "configdb.h", + "ctrls.h", + "dirtree.h", + "error.h", + "expr.h", + "fsio.h", + "inet.h", + "jot.h", + "json.h", + "memcache.h", + "mod_ctrls.h", + "netaddr.h", + "openbsd-blowfish.h", + "os.h", + "pr-syslog.h", + "proftpd.h", + "redis.h", + "sets.h", + "signals.h", + "table.h", + "version.h" + ], + "build": [ + "cd /src/proftpd", + "export LDFLAGS=\"${CFLAGS} \"", + "./configure --enable-ctrls --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make", + "make clean", + "cd -" + ] + }, + "pupnp": { + "headers": [ + "list.h", + "ixml.h", + "ixmldebug.h" + ], + "build": [ + "mkdir -p tmp/build", + "cd tmp/build", + "cmake -DFUZZER=ON -DLIB_FUZZING_ENGINE=\"$LIB_FUZZING_ENGINE\" --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} ../../", + "make -j$(nproc)", + "make install", + "make clean", + "cd -" + ] + }, + "sleuthkit": { + "headers": [ + "tsk/libtsk.h", + "tsk/tsk_incs.h", + "tsk/pool/tsk_apfs.h", + "tsk/util/detect_encryption.h", + "tsk/util/file_system_utils.h", + "tsk/vs/tsk_dos.h", + "tsk/vs/tsk_mac.h", + "tsk/vs/tsk_gpt.h", + "tsk/vs/tsk_bsd.h", + "tsk/vs/tsk_sun.h", + "tsk/img/logical_img.h", + "tsk/base/tsk_os.h", + "tsk/fs/tsk_exfatfs.h", + "tsk/fs/tsk_yaffs.h", + "tsk/fs/tsk_fatxxfs.h", + "tsk/fs/tsk_logical_fs.h", + "tsk/fs/tsk_apfs.h", + "tsk/fs/tsk_ffs.h", + "tsk/fs/tsk_fs.h", + "tsk/fs/tsk_ntfs.h", + "tsk/fs/apfs_fs.h", + "tsk/fs/tsk_fatfs.h", + "tsk/fs/decmpfs.h", + "tsk/fs/tsk_ext2fs.h", + "tsk/fs/tsk_hfs.h", + "tsk/fs/tsk_iso9660.h" + ], + "build": [ + "export CFLAGS=\"$CFLAGS -Wno-error=non-c-typedef-for-linkage\"", + "export CXXFLAGS=\"$CXXFLAGS -Wno-error=non-c-typedef-for-linkage\"", + "# Disable error on all warnings", + "sed -i 's/-Werror//g' ./tsk/util/Makefile.am", + "sed -i 's/-Werror//g' ./tsk/pool/Makefile.am", + "./bootstrap", + "./configure --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} --enable-static --disable-shared --disable-java --without-afflib --without-libewf --without-libvhdi --without-libvmdk", + "make install", + "make clean" + ] + }, + "tidy-html5": { + "headers": [ + "tidybuffio.h", + "stdio.h", + "stdlib.h", + "string.h", + "stdint.h" + ], + "build": [ + "mkdir -p /src/tidy-html5/build1", + "cd /src/tidy-html5/build1", + "cmake -GNinja -DCMAKE_INSTALL_PREFIX=${HEADERFILES_CUSTOM_INSTALL_DIR} ${SRC}/tidy-html5/", + "ninja", + "ninja install", + "cd -" + ] + }, + "unicorn": { + "headers": [ + "uc_priv.h" + ], + "build": [ + "mkdir -p /src/unicorn/build1", + "cd /src/unicorn/build1", + "cmake .. -DCMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=off --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make install", + "make clean", + "rm -rf /out/*", + "find /src/unicorn/build1 -type f ! -name '*.a' -delete", + "cd -", + "rm -rf /src/unicorn/build1" + ] + }, + "unit": { + "headers": [ + "nxt_main.h", + "nxt_conf.h" + ], + "build": [] + }, + "utf8proc": { + "headers": [ + "utf8proc.h" + ], + "build": [ + "mkdir -p /src/utf8proc/build1", + "cd /src/utf8proc/build1", + "cmake .. -DUTF8PROC_ENABLE_TESTING=ON -DLIB_FUZZING_ENGINE=\"$LIB_FUZZING_ENGINE\" --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "V=1 make install", + "make clean", + "cd -" + ] + }, + "vlc": { + "headers": [ + "vlc/vlc.h" + ], + "build": [ + "cd /src/vlc", + "# Use OSS-Fuzz environment rather than hardcoded setup.", + "sed -i 's/-fsanitize-coverage=trace-pc-guard//g' ./configure.ac", + "sed -i 's/-fsanitize-coverage=trace-cmp//g' ./configure.ac", + "sed -i 's/-fsanitize-coverage=trace-pc//g' ./configure.ac", + "sed -i 's/-lFuzzer//g' ./configure.ac", + "# In order to build statically we avoid libxml and ogg plugins.", + "sed -i 's/..\\/..\\/lib\\/libvlc_internal.h/lib\\/libvlc_internal.h/g' ./test/src/input/decoder.c", + "sed -i 's/..\\/modules\\/libxml_plugin.la//g' ./test/Makefile.am", + "sed -i 's/..\\/modules\\/libogg_plugin.la//g' ./test/Makefile.am", + "sed -i 's/f(misc_xml_xml)//g' ./test/src/input/demux-run.c", + "sed -i 's/f(demux_ogg)//g' ./test/src/input/demux-run.c", + "# Ensure that we compile with the correct link flags.", + "RULE=vlc_demux_libfuzzer_LDADD", + "FUZZ_LDFLAGS=\"vlc_demux_libfuzzer_LDFLAGS=\\${LIB_FUZZING_ENGINE}\"", + "sed -i \"s/${RULE}/${FUZZ_LDFLAGS}\\n${RULE}/g\" ./test/Makefile.am", + "RULE=vlc_demux_dec_libfuzzer_LDADD", + "FUZZ_LDFLAGS=\"vlc_demux_dec_libfuzzer_LDFLAGS=\\${LIB_FUZZING_ENGINE}\"", + "sed -i \"s/${RULE}/${FUZZ_LDFLAGS}\\n${RULE}/g\" ./test/Makefile.am", + "./bootstrap", + "./configure --disable-ogg --disable-oggspots --disable-libxml2 --disable-lua \\", + " --disable-shared \\", + " --enable-static \\", + " --enable-vlc=no \\", + " --disable-avcodec \\", + " --disable-swscale \\", + " --disable-a52 \\", + " --disable-xcb \\", + " --disable-alsa \\", + " --with-libfuzzer --prefix=${HEADERFILES_CUSTOM_INSTALL_DIR}", + "make -j$(nproc) install", + "make clean", + "cd -" + ] + }, + "w3m": { + "headers": [ + "stdlib.h", + "stdint.h", + "string.h", + "stddef.h" + ], + "build": [] + }, + "wasm3": { + "headers": [ + "wasm3.h", + "m3_api_libc.h" + ], + "build": [] + }, + "zydis": { + "headers": [ + "Zydis/Decoder.h", + "Zydis/DecoderTypes.h", + "Zydis/Defines.h", + "Zydis/Disassembler.h", + "Zydis/Encoder.h", + "Zydis/Formatter.h", + "Zydis/FormatterBuffer.h", + "Zydis/MetaInfo.h", + "Zydis/Mnemonic.h", + "Zydis/Register.h", + "Zydis/Segment.h", + "Zydis/SharedTypes.h", + "Zydis/ShortString.h", + "Zydis/Status.h", + "Zydis/Utils.h", + "Zydis/Zydis.h" + ], + "build": [ + "mkdir -p /src/zydis/build1", + "cd /src/zydis/build1", + "cmake \\", + " -DZYAN_FORCE_ASSERTS=ON \\", + " -DZYDIS_BUILD_EXAMPLES=OFF \\", + " -DZYDIS_BUILD_TOOLS=OFF \\", + " -DCMAKE_BUILD_TYPE=RelWithDebInfo \\", + " \"-DCMAKE_C_COMPILER=${CC}\" \\", + " \"-DCMAKE_CXX_COMPILER=${CXX}\" \\", + " \"-DCMAKE_C_FLAGS=${CFLAGS}\" \\", + " \"-DCMAKE_CXX_FLAGS=${CXXFLAGS}\" \\", + " --install-prefix=${HEADERFILES_CUSTOM_INSTALL_DIR} ..", + "make install", + "make clean", + "cd -" + ] + } +} diff --git a/headerfiles/headerfiles/data/headerfiles.json.bk b/headerfiles/headerfiles/data/headerfiles.json.bk new file mode 100644 index 0000000000..5754a5269a --- /dev/null +++ b/headerfiles/headerfiles/data/headerfiles.json.bk @@ -0,0 +1,246 @@ +{ + "libfdk-aac": [ + "aacdecoder_lib.h", + "aacenc_lib.h", + "ac_arith_coder.h", + "FDK_drcDecLib.h", + "tpdec_lib.h", + "tpenc_lib.h", + "pcm_utils.h", + "pcmdmx_lib.h", + "limiter.h", + "sac_dec_lib.h", + "sacenc_lib.h", + "sbrdecoder.h", + "sbr_encoder.h", + "FDK_audio.h", + + "FDK_lpc.h", + "fft_rad2.h", + "FDK_matrixCalloc.h", + "qmf.h", + "FDK_tools_rom.h", + "dct.h", + "huff_nodes.h", + "FDK_bitstream.h", + "FDK_bitbuffer.h", + "mdct.h", + "FDK_core.h", + "FDK_qmf_domain.h", + "FDK_decorrelate.h", + "FDK_hybrid.h", + "nlc_dec.h", + "FDK_trigFcts.h", + "scramble.h", + "FDK_crc.h", + "fft.h", + "autocorr2nd.h", + "machine_type.h", + "genericStds.h", + "syslib_channelMapDescr.h" + ], + "libfuse": [ + "fuse.h", + "fuse_lowlevel.h", + "fuse_i.h", + "fuse_misc.h", + "fuse_kernel.h", + "mount_util.h", + "fuse_mount_compat.h", + "cuse_lowlevel.h" + ], + "libpsl": [ + "unicode/decimfmt.h", + "unicode/ucol.h", + "unicode/udat.h", + "unilbrk.h", + "unicode/enumset.h", + "unicode/tzrule.h", + "unicode/utf_old.h", + "unicode/ulocdata.h", + "unicode/ureldatefmt.h", + "unicode/vtzone.h", + "unicode/uregion.h", + "unicode/coll.h", + "uniwidth.h", + "unicode/uloc.h", + "unicode/timezone.h", + "unicode/rbbi.h", + "unicode/unifunct.h", + "unicode/usprep.h", + "unicode/appendable.h", + "unicode/umachine.h", + "unicode/regex.h", + "unicode/uregex.h", + "uniconv.h", + "uninorm.h", + "unicode/ubiditransform.h", + "unicode/locdspnm.h", + "unicode/numsys.h", + "unicode/ulistformatter.h", + "unicode/rbnf.h", + "unicode/uspoof.h", + "unicode/utypes.h", + "unicode/tzfmt.h", + "unicode/ustring.h", + "unicode/rep.h", + "unicode/char16ptr.h", + "unicode/uversion.h", + "unicode/sortkey.h", + "unicode/dtintrv.h", + "unicode/currunit.h", + "unicode/locid.h", + "unicode/utf.h", + "unicode/dtptngen.h", + "unicode/unorm.h", + "unicode/uchriter.h", + "unicode/edits.h", + "unicode/uenum.h", + "unicode/plurfmt.h", + "unicode/unumsys.h", + "unicode/casemap.h", + "unicode/measfmt.h", + "unicode/stringpiece.h", + "unicode/filteredbrk.h", + "unicode/utext.h", + "unicode/uobject.h", + "unicode/udata.h", + "unigbrk.h", + "unicode/format.h", + "unicode/tmutamt.h", + "unicode/ushape.h", + "unicode/ucurr.h", + "unicode/ucharstriebuilder.h", + "unicode/normlzr.h", + "unicode/coleitr.h", + "unicode/strenum.h", + "unicode/rbtz.h", + "idn2.h", + "unicode/unum.h", + "unicode/errorcode.h", + "unicode/parsepos.h", + "unicode/smpdtfmt.h", + "unicode/choicfmt.h", + "unicode/tmunit.h", + "unicode/ustringtrie.h", + "unicode/dtrule.h", + "unicode/ptypes.h", + "unicode/unirepl.h", + "unicode/usearch.h", + "unicode/ubidi.h", + "punycode.h", + "unicode/search.h", + "unicode/umsg.h", + "unicode/dtitvfmt.h", + "unicode/putil.h", + "unicode/reldatefmt.h", + "unicode/chariter.h", + "unicode/currpinf.h", + "unicode/ucat.h", + "unicode/ucsdet.h", + "unicode/uidna.h", + "unicode/msgfmt.h", + "unicode/umisc.h", + "unictype.h", + "unicode/parseerr.h", + "unicode/ucnvsel.h", + "unicode/fieldpos.h", + "unicode/uiter.h", + "unicode/std_string.h", + "unicode/urep.h", + "unicode/unistr.h", + "unicode/alphaindex.h", + "unicode/ubrk.h", + "unicode/unorm2.h", + "unicode/ucasemap.h", + "unicode/dtfmtsym.h", + "unicode/messagepattern.h", + "unicode/basictz.h", + "unicode/stringtriebuilder.h", + "unicode/schriter.h", + "unicode/brkiter.h", + "unicode/unimatch.h", + "unicode/idna.h", + "unicode/ucharstrie.h", + "unicode/normalizer2.h", + "unicode/ures.h", + "unicode/gregocal.h", + "unicode/bytestream.h", + "unicode/upluralrules.h", + "unicode/listformatter.h", + "unicode/utmscale.h", + "unicode/compactdecimalformat.h", + "unicode/measunit.h", + "unicode/uclean.h", + "unicase.h", + "unicode/selfmt.h", + "unicode/region.h", + "unicode/tznames.h", + "unistdio.h", + "unicode/icuplug.h", + "unicode/datefmt.h", + "unicode/udateintervalformat.h", + "unicode/simpletz.h", + "unicode/bytestrie.h", + "unicode/platform.h", + "unicode/urename.h", + "unicode/tmutfmt.h", + "unicode/scientificnumberformatter.h", + "unicode/utf16.h", + "unicode/translit.h", + "unicode/plurrule.h", + "unicode/dbbi.h", + "unicode/udatpg.h", + "unicode/simpleformatter.h", + "unicode/caniter.h", + "unicode/uniset.h", + "unicode/curramt.h", + "unicode/ucnv.h", + "unicode/gender.h", + "unicode/numfmt.h", + "unicode/uscript.h", + "unicode/measure.h", + "unicode/ucnv_cb.h", + "unicode/usetiter.h", + "unicode/bytestriebuilder.h", + "unicode/ucal.h", + "idn-int.h", + "unicode/symtable.h", + "unicode/fpositer.h", + "unicode/ugender.h", + "unistr.h", + "unicode/unifilt.h", + "unicode/utrans.h", + "unicode/uformattable.h", + "unicode/uconfig.h", + "unicode/tblcoll.h", + "unicode/stsearch.h", + "unicode/uchar.h", + "unicode/tztrans.h", + "unicode/ufieldpositer.h", + "unicode/uldnames.h", + "unicode/localpointer.h", + "unistring/version.h", + "unicode/dcfmtsym.h", + "unicode/uset.h", + "uniname.h", + "unicode/dtitvinf.h", + "unicode/udisplaycontext.h", + "unitypes.h", + "unicode/ucnv_err.h", + "unicode/icudataver.h", + "unicode/utf8.h", + "unicode/fmtable.h", + "unicode/calendar.h", + "unicode/utrace.h", + "unicode/resbund.h", + "unicode/ucoleitr.h", + "uniwbrk.h" + ], + "libsodium": [ + "sodium.h" + ], + "libtasn1": [ + "libtasn1.h" + ] +} \ No newline at end of file diff --git a/headerfiles/release.sh b/headerfiles/release.sh new file mode 100644 index 0000000000..ada17e8248 --- /dev/null +++ b/headerfiles/release.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +# release.sh - A script to build and upload Python packages to PyPI + +# Exit immediately if a command exits with a non-zero status +set -e + +# Ensure required tools are installed +echo "Checking for required tools..." +REQUIRED_TOOLS=(python3 pip twine) +for tool in "${REQUIRED_TOOLS[@]}"; do + if ! command -v $tool &> /dev/null; then + echo "$tool is not installed. Installing..." + pip install $tool + else + echo "$tool is already installed." + fi +done + +# Clean previous builds +echo "Cleaning previous builds..." +rm -rf build/ dist/ *.egg-info + +# Build the package +echo "Building the package..." +python3 setup.py sdist bdist_wheel + +# Upload the package to PyPI +echo "Uploading the package to PyPI..." +twine upload dist/* + +echo "Package uploaded successfully!" + +# Note: You might need to add --verbose flag to see more details +# Example: twine upload --verbose dist/* diff --git a/headerfiles/setup.py b/headerfiles/setup.py new file mode 100644 index 0000000000..9982f0a07b --- /dev/null +++ b/headerfiles/setup.py @@ -0,0 +1,36 @@ +from setuptools import setup, find_packages + +setup( + name='headerfiles', + version='0.4', + packages=find_packages(), + include_package_data=True, + install_requires=[ + # add deps here + 'click', + ], + entry_points={ + 'console_scripts': [ + 'headerfiles-cli=headerfiles.cli:cli', + ], + }, + package_data={ + 'headerfiles' : ['data/headerfiles.json'], + }, + extras_require={ + 'dev': [ + 'pytest', + ], + }, + author='Cen Zhang', + author_email='blbllhy@gmail.com', + description='Header files inference for C/C++ projects', + long_description=open('README.md').read(), + long_description_content_type='text/markdown', + url='https://github.com/occia/headerfiles', + classifiers=[ + 'Programming Language :: Python :: 3', + 'Operating System :: OS Independent', + ], + python_requires='>=3.7', +) diff --git a/headerfiles/tests/test_api.py b/headerfiles/tests/test_api.py new file mode 100644 index 0000000000..7c92e83d5d --- /dev/null +++ b/headerfiles/tests/test_api.py @@ -0,0 +1,25 @@ +import headerfiles.api as api + +def test_is_supported_proj(): + assert api.is_supported_proj("libfdk-aac") + assert api.is_supported_proj("libfuse") + assert api.is_supported_proj("libpsl") + assert api.is_supported_proj("libsodium") + assert api.is_supported_proj("libtasn1") + assert not api.is_supported_proj("aaa") + +def check_result_is_list_of_strings(result: list): + assert isinstance(result, list) + assert len(result) == 0 or all(isinstance(x, str) for x in result) + +def test_get_proj_headers(): + check_result_is_list_of_strings(api.get_proj_headers("libfdk-aac")) + check_result_is_list_of_strings(api.get_proj_headers("libfuse")) + check_result_is_list_of_strings(api.get_proj_headers("libpsl")) + check_result_is_list_of_strings(api.get_proj_headers("libsodium")) + check_result_is_list_of_strings(api.get_proj_headers("libtasn1")) + assert api.get_proj_headers("aaa") is None + +if __name__ == "__main__": + import pytest + pytest.main() diff --git a/llm_toolkit/prompt_builder.py b/llm_toolkit/prompt_builder.py index 088a7ac1a6..7087614317 100644 --- a/llm_toolkit/prompt_builder.py +++ b/llm_toolkit/prompt_builder.py @@ -23,6 +23,9 @@ import jinja2 +# import headerfiles.api as headerfiles +from headerfiles.headerfiles import api as headerfiles + from data_prep import introspector, project_targets from experiment import oss_fuzz_checkout from experiment.benchmark import Benchmark, FileType @@ -73,6 +76,7 @@ C_PROMPT_HEADERS_TO_ALWAYS_INCLUDES = ['stdio.h', 'stdlib.h', 'stdint.h'] +HEADERFILES = bool(os.getenv('LLM_HEADERFILES', '')) class PromptBuilder: """Prompt builder.""" @@ -102,6 +106,24 @@ def build_triager_prompt(self, benchmark: Benchmark, driver_code: str, def post_process_generated_code(self, generated_code: str) -> str: """Allows prompt builder to adjust the generated code.""" # return the same by default + if not HEADERFILES: + return generated_code + + lines = generated_code.splitlines() + + # filter error lines: "" or "" + filtered_lines = [line for line in lines if line not in ("", "")] + generated_code = "\n".join(filtered_lines) + + # filter duplicate headers + headers_to_include = headerfiles.get_proj_headers(self.benchmark.project) + headers_to_include = [f'#include "{header}"' for header in headers_to_include] + existing_headers = [line for line in generated_code.splitlines() if line.startswith('#include')] + for line in existing_headers: + generated_code = generated_code.replace(line, '') + headers_to_append = [header for header in existing_headers if header not in headers_to_include] + headers_to_include.extend(headers_to_append) + generated_code = '\n'.join(headers_to_include) + '\n' + '\n' + generated_code.strip() return generated_code @@ -1162,9 +1184,14 @@ def build(self, function_source) # Set header inclusion string if there are any headers. - headers_to_include = \ - introspector.query_introspector_header_files_to_include( - self.benchmark.project, self.benchmark.function_signature) + if HEADERFILES: + headers_to_include = headerfiles.get_proj_headers(self.benchmark.project) + else: + headers_to_include = [] + for header in introspector.query_introspector_header_files_to_include( + self.benchmark.project, self.benchmark.function_signature): + if header not in headers_to_include: + headers_to_include.append(header) header_inclusion_string = '' if headers_to_include: header_inclusion_string = ', '.join(headers_to_include) diff --git a/prompts/template_xml/context.txt b/prompts/template_xml/context.txt index 0a578bb317..87b269c57f 100644 --- a/prompts/template_xml/context.txt +++ b/prompts/template_xml/context.txt @@ -1,7 +1,12 @@ -{% if include_statement %} -You must add the following #include statement in the fuzz target, its header file defines the function-under-test. +{% if headers or include_statement %} +We have prepared the following list of headers which covers all target project APIs and will prepend them as #include statments at the beginning of your generated fuzz target. Therefore, you only need to include the headers of non-target-project APIs used in your fuzz target. +{% if headers %} +{{ headers }} +{% endif %} +{% if include_statement %} {{ include_statement }} +{% endif %} {% endif %} diff --git a/run_one_experiment.py b/run_one_experiment.py index ce64d5cd6b..06b7632e1f 100644 --- a/run_one_experiment.py +++ b/run_one_experiment.py @@ -49,7 +49,7 @@ # WARN: Avoid large NUM_SAMPLES in highly parallelized local experiments. # It controls the number of LLM responses per prompt, which may exceed your # LLM's limit on query-per-second. -NUM_SAMPLES = 2 +NUM_SAMPLES = 10 MAX_TOKENS: int = 4096 RUN_TIMEOUT: int = 30 TEMPERATURE: float = 0.4 From 8216018ca6a85f874e3d39c1e18b853a3545b7ca Mon Sep 17 00:00:00 2001 From: Dongge Liu Date: Tue, 24 Sep 2024 10:12:59 +1000 Subject: [PATCH 3/4] Delete temp --- temp | 1 - 1 file changed, 1 deletion(-) delete mode 100644 temp diff --git a/temp b/temp deleted file mode 100644 index 8b13789179..0000000000 --- a/temp +++ /dev/null @@ -1 +0,0 @@ - From 278c7a350d338d63209056458a063cc6be6fad48 Mon Sep 17 00:00:00 2001 From: Dongge Liu Date: Tue, 24 Sep 2024 10:18:59 +1000 Subject: [PATCH 4/4] Enable headerfile module --- report/docker_run.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/report/docker_run.sh b/report/docker_run.sh index f36f0cc378..cf29dde515 100755 --- a/report/docker_run.sh +++ b/report/docker_run.sh @@ -28,6 +28,8 @@ # TODO(dongge): Re-write this script in Python as it gets more complex. +export LLM_HEADERFILES=1 + BENCHMARK_SET=$1 FREQUENCY_LABEL=$2 RUN_TIMEOUT=$3