nDPI/fuzz/Makefile.am
Ivan Nardi 575a2b238a
Fix fuzzer dependencies to rebuild when library changes (#3078)
Five fuzzers (fuzz_process_packet, fuzz_ndpi_reader, fuzz_ndpi_reader_alloc_fail,
fuzz_ndpi_reader_payload_analyzer, and fuzz_tls_certificate) were not rebuilding
when libndpi.a changed because their explicit DEPENDENCIES declarations only
included dictionary files.

In Automake, when prog_DEPENDENCIES is explicitly set, it overrides the automatic
dependency generation from LDADD. This caused these fuzzers to miss the library
dependency that the other 55 fuzzers correctly inherited.

This commit adds $(top_builddir)/src/lib/libndpi.a to the DEPENDENCIES for all
5 affected fuzzers, ensuring they rebuild whenever the library changes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-13 17:10:05 +01:00

407 lines
21 KiB
Makefile

bin_PROGRAMS = fuzz_process_packet fuzz_ndpi_reader fuzz_ndpi_reader_alloc_fail fuzz_ndpi_reader_payload_analyzer fuzz_quic_get_crypto_data fuzz_config fuzz_community_id fuzz_serialization fuzz_tls_certificate fuzz_dga fuzz_is_stun_udp fuzz_is_stun_tcp
#Alghoritms
bin_PROGRAMS += fuzz_alg_ranking fuzz_alg_bins fuzz_alg_hll fuzz_alg_hw_rsi_outliers_da fuzz_alg_jitter fuzz_alg_ses_des fuzz_alg_crc32_md5 fuzz_alg_bytestream fuzz_alg_shoco fuzz_alg_memmem fuzz_alg_strnstr fuzz_alg_quick_encryption
#Data structures
bin_PROGRAMS += fuzz_ds_patricia fuzz_ds_ahocorasick fuzz_ds_libcache fuzz_ds_tree fuzz_ds_ptree fuzz_ds_hash fuzz_ds_cmsketch fuzz_ds_bitmap64_fuse fuzz_ds_domain_classify fuzz_ds_kdtree fuzz_ds_btree fuzz_ds_address_cache fuzz_ds_bitmap fuzz_ds_filter
#Third party
bin_PROGRAMS += fuzz_libinjection fuzz_binaryfusefilter
#Internal crypto
bin_PROGRAMS += fuzz_gcrypt_light fuzz_gcrypt_aes fuzz_gcrypt_gcm fuzz_gcrypt_cipher
#Configuration files
bin_PROGRAMS += fuzz_filecfg_protocols fuzz_filecfg_categories fuzz_filecfg_malicious_sha1 fuzz_filecfg_malicious_ja4 fuzz_filecfg_risk_domains fuzz_filecfg_config fuzz_filecfg_category
#Reader utils
bin_PROGRAMS += fuzz_readerutils_workflow
#Mutators
bin_PROGRAMS += fuzz_ndpi_reader_pl7m fuzz_ndpi_reader_pl7m_64k fuzz_ndpi_reader_pl7m_simplest fuzz_ndpi_reader_pl7m_internal fuzz_ndpi_reader_pl7m_simplest_internal fuzz_ndpi_reader_pl7m_only_subclassification fuzz_ndpi_reader_pl7m_randomize_ports
#Common flags
AM_CPPFLAGS = -I $(top_srcdir)/src/include -I $(top_srcdir)/src/lib/third_party/include/ @NDPI_CFLAGS@
AM_LDFLAGS = $(LIBS)
# Use AM_CFLAGS for package flags, never modify or embed user's CFLAGS
AM_CFLAGS = @NDPI_CFLAGS@
AM_CXXFLAGS = @NDPI_CFLAGS@
LDADD = $(top_builddir)/src/lib/libndpi.a $(PCAP_LIB) $(ADDITIONAL_LIBS)
if HAS_FUZZLDFLAGS
AM_CFLAGS += $(LIB_FUZZING_ENGINE)
AM_LDFLAGS += $(LIB_FUZZING_ENGINE)
AM_CXXFLAGS += $(LIB_FUZZING_ENGINE)
endif
# Common linker command template for all fuzz targets
# All fuzz targets need to use CXX as linker (required by libFuzzer)
FUZZ_LINK_COMMAND = $(AM_V_CCLD)$(LIBTOOL) $(AM_V_lt) --silent --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CXX) $(AM_CXXFLAGS) $(CXXFLAGS) \
$($@_LDFLAGS) @NDPI_LDFLAGS@ $(AM_LDFLAGS) $(LDFLAGS) -o $@
# Define sources and flags for each fuzz target
# Note: Fuzz targets with dictionaries should depend on them for proper rebuilds
fuzz_process_packet_SOURCES = fuzz_process_packet.c fuzz_common_code.c
fuzz_process_packet_LINK = $(FUZZ_LINK_COMMAND)
fuzz_process_packet_DEPENDENCIES = $(top_builddir)/src/lib/libndpi.a $(srcdir)/dictionary.dict
fuzz_ndpi_reader_SOURCES = fuzz_ndpi_reader.c fuzz_common_code.c $(top_srcdir)/example/reader_util.c
fuzz_ndpi_reader_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/example/
fuzz_ndpi_reader_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ndpi_reader_DEPENDENCIES = $(top_builddir)/src/lib/libndpi.a $(srcdir)/dictionary.dict
fuzz_ndpi_reader_alloc_fail_SOURCES = fuzz_ndpi_reader_alloc_fail.c fuzz_common_code.c $(top_srcdir)/example/reader_util.c
fuzz_ndpi_reader_alloc_fail_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/example/ -DENABLE_MEM_ALLOC_FAILURES -DCRYPT_FORCE_NO_AESNI -DENABLE_FINGERPRINT_FP
fuzz_ndpi_reader_alloc_fail_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ndpi_reader_alloc_fail_DEPENDENCIES = $(top_builddir)/src/lib/libndpi.a $(srcdir)/dictionary.dict
fuzz_ndpi_reader_payload_analyzer_SOURCES = fuzz_ndpi_reader_payload_analyzer.c fuzz_common_code.c $(top_srcdir)/example/reader_util.c
fuzz_ndpi_reader_payload_analyzer_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/example/ -DENABLE_MEM_ALLOC_FAILURES -DENABLE_PAYLOAD_ANALYZER
fuzz_ndpi_reader_payload_analyzer_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ndpi_reader_payload_analyzer_DEPENDENCIES = $(top_builddir)/src/lib/libndpi.a $(srcdir)/dictionary.dict
fuzz_quic_get_crypto_data_SOURCES = fuzz_quic_get_crypto_data.c fuzz_common_code.c
fuzz_quic_get_crypto_data_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_quic_get_crypto_data_LINK = $(FUZZ_LINK_COMMAND)
fuzz_config_SOURCES = fuzz_config.cpp fuzz_common_code.c
fuzz_config_CXXFLAGS = $(AM_CXXFLAGS) -DNDPI_LIB_COMPILATION
fuzz_config_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_config_LINK = $(FUZZ_LINK_COMMAND)
fuzz_community_id_SOURCES = fuzz_community_id.cpp fuzz_common_code.c
fuzz_community_id_LINK = $(FUZZ_LINK_COMMAND)
fuzz_serialization_SOURCES = fuzz_serialization.cpp fuzz_common_code.c
fuzz_serialization_LINK = $(FUZZ_LINK_COMMAND)
fuzz_alg_ranking_SOURCES = fuzz_alg_ranking.cpp fuzz_common_code.c
fuzz_alg_ranking_LINK = $(FUZZ_LINK_COMMAND)
fuzz_alg_bins_SOURCES = fuzz_alg_bins.cpp fuzz_common_code.c
fuzz_alg_bins_LINK = $(FUZZ_LINK_COMMAND)
fuzz_alg_hll_SOURCES = fuzz_alg_hll.cpp fuzz_common_code.c
fuzz_alg_hll_LINK = $(FUZZ_LINK_COMMAND)
fuzz_alg_hw_rsi_outliers_da_SOURCES = fuzz_alg_hw_rsi_outliers_da.cpp fuzz_common_code.c
fuzz_alg_hw_rsi_outliers_da_LINK = $(FUZZ_LINK_COMMAND)
fuzz_alg_jitter_SOURCES = fuzz_alg_jitter.cpp fuzz_common_code.c
fuzz_alg_jitter_LINK = $(FUZZ_LINK_COMMAND)
fuzz_alg_crc32_md5_SOURCES = fuzz_alg_crc32_md5.c
fuzz_alg_crc32_md5_LINK = $(FUZZ_LINK_COMMAND)
fuzz_alg_bytestream_SOURCES = fuzz_alg_bytestream.c
fuzz_alg_bytestream_LINK = $(FUZZ_LINK_COMMAND)
fuzz_alg_shoco_SOURCES = fuzz_alg_shoco.cpp
fuzz_alg_shoco_LINK = $(FUZZ_LINK_COMMAND)
fuzz_alg_memmem_SOURCES = fuzz_alg_memmem.cpp
fuzz_alg_memmem_LINK = $(FUZZ_LINK_COMMAND)
fuzz_alg_strnstr_SOURCES = fuzz_alg_strnstr.cpp
fuzz_alg_strnstr_LINK = $(FUZZ_LINK_COMMAND)
fuzz_alg_quick_encryption_SOURCES = fuzz_alg_quick_encryption.cpp fuzz_common_code.c
fuzz_alg_quick_encryption_LINK = $(FUZZ_LINK_COMMAND)
fuzz_alg_ses_des_SOURCES = fuzz_alg_ses_des.cpp fuzz_common_code.c
fuzz_alg_ses_des_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_patricia_SOURCES = fuzz_ds_patricia.cpp fuzz_common_code.c
fuzz_ds_patricia_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_ahocorasick_SOURCES = fuzz_ds_ahocorasick.cpp fuzz_common_code.c
fuzz_ds_ahocorasick_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_libcache_SOURCES = fuzz_ds_libcache.cpp fuzz_common_code.c
fuzz_ds_libcache_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_tree_SOURCES = fuzz_ds_tree.cpp fuzz_common_code.c
fuzz_ds_tree_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_ptree_SOURCES = fuzz_ds_ptree.cpp fuzz_common_code.c
fuzz_ds_ptree_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_hash_SOURCES = fuzz_ds_hash.cpp fuzz_common_code.c
fuzz_ds_hash_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_cmsketch_SOURCES = fuzz_ds_cmsketch.cpp fuzz_common_code.c
fuzz_ds_cmsketch_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_bitmap64_fuse_SOURCES = fuzz_ds_bitmap64_fuse.cpp fuzz_common_code.c
fuzz_ds_bitmap64_fuse_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_domain_classify_SOURCES = fuzz_ds_domain_classify.cpp fuzz_common_code.c
fuzz_ds_domain_classify_CXXFLAGS = $(AM_CXXFLAGS) -DNDPI_LIB_COMPILATION
fuzz_ds_domain_classify_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_kdtree_SOURCES = fuzz_ds_kdtree.cpp fuzz_common_code.c
fuzz_ds_kdtree_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_btree_SOURCES = fuzz_ds_btree.cpp fuzz_common_code.c
fuzz_ds_btree_CXXFLAGS = $(AM_CXXFLAGS) -DNDPI_LIB_COMPILATION
fuzz_ds_btree_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_ds_btree_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_address_cache_SOURCES = fuzz_ds_address_cache.cpp fuzz_common_code.c
fuzz_ds_address_cache_CXXFLAGS = $(AM_CXXFLAGS) -DNDPI_LIB_COMPILATION
fuzz_ds_address_cache_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_ds_address_cache_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_bitmap_SOURCES = fuzz_ds_bitmap.cpp fuzz_common_code.c
fuzz_ds_bitmap_CXXFLAGS = $(AM_CXXFLAGS) -DNDPI_LIB_COMPILATION
fuzz_ds_bitmap_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_ds_bitmap_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ds_filter_SOURCES = fuzz_ds_filter.cpp fuzz_common_code.c
fuzz_ds_filter_CXXFLAGS = $(AM_CXXFLAGS) -DNDPI_LIB_COMPILATION
fuzz_ds_filter_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_ds_filter_LINK = $(FUZZ_LINK_COMMAND)
fuzz_libinjection_SOURCES = fuzz_libinjection.c
fuzz_libinjection_LINK = $(FUZZ_LINK_COMMAND)
fuzz_binaryfusefilter_SOURCES = fuzz_binaryfusefilter.cpp fuzz_common_code.c
fuzz_binaryfusefilter_LINK = $(FUZZ_LINK_COMMAND)
fuzz_tls_certificate_SOURCES = fuzz_tls_certificate.c fuzz_common_code.c
fuzz_tls_certificate_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_tls_certificate_LINK = $(FUZZ_LINK_COMMAND)
fuzz_tls_certificate_DEPENDENCIES = $(top_builddir)/src/lib/libndpi.a $(srcdir)/dictionary_tls_certificate.dict
fuzz_dga_SOURCES = fuzz_dga.c fuzz_common_code.c
fuzz_dga_LINK = $(FUZZ_LINK_COMMAND)
fuzz_is_stun_udp_SOURCES = fuzz_is_stun.c fuzz_common_code.c
fuzz_is_stun_udp_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_is_stun_udp_LINK = $(FUZZ_LINK_COMMAND)
fuzz_is_stun_tcp_SOURCES = fuzz_is_stun_tcp.c fuzz_common_code.c
fuzz_is_stun_tcp_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION -DSTUN_TCP
fuzz_is_stun_tcp_LINK = $(FUZZ_LINK_COMMAND)
fuzz_gcrypt_light_SOURCES = fuzz_gcrypt_light.cpp fuzz_common_code.c
fuzz_gcrypt_light_LINK = $(FUZZ_LINK_COMMAND)
fuzz_gcrypt_aes_SOURCES = fuzz_gcrypt_aes.cpp
fuzz_gcrypt_aes_LINK = $(FUZZ_LINK_COMMAND)
fuzz_gcrypt_gcm_SOURCES = fuzz_gcrypt_gcm.cpp
fuzz_gcrypt_gcm_LINK = $(FUZZ_LINK_COMMAND)
fuzz_gcrypt_cipher_SOURCES = fuzz_gcrypt_cipher.cpp
fuzz_gcrypt_cipher_LINK = $(FUZZ_LINK_COMMAND)
fuzz_filecfg_protocols_SOURCES = fuzz_filecfg_protocols.c fuzz_common_code.c
fuzz_filecfg_protocols_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_filecfg_protocols_LINK = $(FUZZ_LINK_COMMAND)
fuzz_filecfg_categories_SOURCES = fuzz_filecfg_categories.c fuzz_common_code.c
fuzz_filecfg_categories_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_filecfg_categories_LINK = $(FUZZ_LINK_COMMAND)
fuzz_filecfg_malicious_sha1_SOURCES = fuzz_filecfg_malicious_sha1.c fuzz_common_code.c
fuzz_filecfg_malicious_sha1_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_filecfg_malicious_sha1_LINK = $(FUZZ_LINK_COMMAND)
fuzz_filecfg_malicious_ja4_SOURCES = fuzz_filecfg_malicious_ja4.c fuzz_common_code.c
fuzz_filecfg_malicious_ja4_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_filecfg_malicious_ja4_LINK = $(FUZZ_LINK_COMMAND)
fuzz_filecfg_risk_domains_SOURCES = fuzz_filecfg_risk_domains.c fuzz_common_code.c
fuzz_filecfg_risk_domains_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_filecfg_risk_domains_LINK = $(FUZZ_LINK_COMMAND)
fuzz_filecfg_config_SOURCES = fuzz_filecfg_config.c fuzz_common_code.c
fuzz_filecfg_config_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_filecfg_config_LINK = $(FUZZ_LINK_COMMAND)
fuzz_filecfg_category_SOURCES = fuzz_filecfg_category.c fuzz_common_code.c
fuzz_filecfg_category_CFLAGS = $(AM_CFLAGS) -DNDPI_LIB_COMPILATION
fuzz_filecfg_category_LINK = $(FUZZ_LINK_COMMAND)
fuzz_readerutils_workflow_SOURCES = fuzz_readerutils_workflow.cpp fuzz_common_code.c $(top_srcdir)/example/reader_util.c
fuzz_readerutils_workflow_CXXFLAGS = $(AM_CXXFLAGS) -I$(top_srcdir)/example/
fuzz_readerutils_workflow_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/example/
fuzz_readerutils_workflow_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ndpi_reader_pl7m_simplest_SOURCES = fuzz_ndpi_reader_pl7m_simplest.c fuzz_common_code.c $(top_srcdir)/example/reader_util.c $(top_srcdir)/src/lib/third_party/src/fuzz/pl7m.c
fuzz_ndpi_reader_pl7m_simplest_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/example/ -DENABLE_PCAP_L7_MUTATOR -DPL7M_USE_SIMPLEST_MUTATOR
fuzz_ndpi_reader_pl7m_simplest_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ndpi_reader_pl7m_simplest_internal_SOURCES = fuzz_ndpi_reader_pl7m_simplest_internal.c fuzz_common_code.c $(top_srcdir)/example/reader_util.c $(top_srcdir)/src/lib/third_party/src/fuzz/pl7m.c
fuzz_ndpi_reader_pl7m_simplest_internal_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/example/ -DENABLE_PCAP_L7_MUTATOR -DPL7M_USE_SIMPLEST_MUTATOR -DPL7M_USE_INTERNAL_FUZZER_MUTATE
fuzz_ndpi_reader_pl7m_simplest_internal_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ndpi_reader_pl7m_SOURCES = fuzz_ndpi_reader_pl7m.c fuzz_common_code.c $(top_srcdir)/example/reader_util.c $(top_srcdir)/src/lib/third_party/src/fuzz/pl7m.c
fuzz_ndpi_reader_pl7m_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/example/ -DENABLE_PCAP_L7_MUTATOR -DENABLE_CONFIG2
fuzz_ndpi_reader_pl7m_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ndpi_reader_pl7m_64k_SOURCES = fuzz_ndpi_reader_pl7m_64k.c fuzz_common_code.c $(top_srcdir)/example/reader_util.c $(top_srcdir)/src/lib/third_party/src/fuzz/pl7m.c
fuzz_ndpi_reader_pl7m_64k_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/example/ -DENABLE_PCAP_L7_MUTATOR -DPL7M_USE_64K_PACKETS
fuzz_ndpi_reader_pl7m_64k_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ndpi_reader_pl7m_internal_SOURCES = fuzz_ndpi_reader_pl7m_internal.c fuzz_common_code.c $(top_srcdir)/example/reader_util.c $(top_srcdir)/src/lib/third_party/src/fuzz/pl7m.c
fuzz_ndpi_reader_pl7m_internal_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/example/ -DENABLE_PCAP_L7_MUTATOR -DPL7M_USE_INTERNAL_FUZZER_MUTATE
fuzz_ndpi_reader_pl7m_internal_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ndpi_reader_pl7m_only_subclassification_SOURCES = fuzz_ndpi_reader_pl7m_only_subclassification.c fuzz_common_code.c $(top_srcdir)/example/reader_util.c $(top_srcdir)/src/lib/third_party/src/fuzz/pl7m.c
fuzz_ndpi_reader_pl7m_only_subclassification_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/example/ -DENABLE_PCAP_L7_MUTATOR -DENABLE_ONLY_SUBCLASSIFICATION
fuzz_ndpi_reader_pl7m_only_subclassification_LINK = $(FUZZ_LINK_COMMAND)
fuzz_ndpi_reader_pl7m_randomize_ports_SOURCES = fuzz_ndpi_reader_pl7m_randomize_ports.c fuzz_common_code.c $(top_srcdir)/example/reader_util.c $(top_srcdir)/src/lib/third_party/src/fuzz/pl7m.c
fuzz_ndpi_reader_pl7m_randomize_ports_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/example/ -DENABLE_PCAP_L7_MUTATOR -DPL7M_ENABLE_RANDOMIZE_PORTS
fuzz_ndpi_reader_pl7m_randomize_ports_LINK = $(FUZZ_LINK_COMMAND)
# required for Google oss-fuzz
# see https://github.com/google/oss-fuzz/tree/master/projects/ndpi
testpcaps := $(wildcard $(top_srcdir)/tests/cfgs/default/pcap/*.pcap*)
# Incremental corpus building: only rebuild zip if pcap files changed
testpcaps.zip: $(testpcaps)
@echo "Building testpcaps.zip from $(words $(testpcaps)) pcap files..."
@zip -q -j testpcaps.zip $(testpcaps)
# Pattern rule for PCAP-based corpus zips (incremental: only copy if testpcaps.zip is newer)
%_seed_corpus.zip: testpcaps.zip
@if [ ! -f $@ ] || [ $< -nt $@ ]; then \
cp testpcaps.zip $@; \
else \
echo "$@ is up to date"; \
fi
# Explicit targets for PCAP-based corpora (uses pattern rule above)
fuzz_ndpi_reader_seed_corpus.zip: testpcaps.zip
fuzz_ndpi_reader_alloc_fail_seed_corpus.zip: testpcaps.zip
fuzz_ndpi_reader_payload_analyzer_seed_corpus.zip: testpcaps.zip
fuzz_ndpi_reader_pl7m_simplest_seed_corpus.zip: testpcaps.zip
fuzz_ndpi_reader_pl7m_simplest_internal_seed_corpus.zip: testpcaps.zip
fuzz_ndpi_reader_pl7m_seed_corpus.zip: testpcaps.zip
fuzz_ndpi_reader_pl7m_64k_seed_corpus.zip: testpcaps.zip
fuzz_ndpi_reader_pl7m_internal_seed_corpus.zip: testpcaps.zip
fuzz_ndpi_reader_pl7m_only_subclassification_seed_corpus.zip: testpcaps.zip
fuzz_ndpi_reader_pl7m_randomize_ports_seed_corpus.zip: testpcaps.zip
# Corpus files from directories (incremental: only rebuild if source files changed)
files_corpus_fuzz_quic_get_crypto_data := $(wildcard $(srcdir)/corpus/fuzz_quic_get_crypto_data/*)
fuzz_quic_get_crypto_data_seed_corpus.zip: $(files_corpus_fuzz_quic_get_crypto_data)
@zip -q -j $@ $(files_corpus_fuzz_quic_get_crypto_data)
files_corpus_fuzz_is_stun_udp := $(wildcard $(srcdir)/corpus/fuzz_is_stun_udp/*)
fuzz_is_stun_udp_seed_corpus.zip: $(files_corpus_fuzz_is_stun_udp)
@zip -q -j $@ $(files_corpus_fuzz_is_stun_udp)
files_corpus_fuzz_is_stun_tcp := $(wildcard $(srcdir)/corpus/fuzz_is_stun_tcp/*)
fuzz_is_stun_tcp_seed_corpus.zip: $(files_corpus_fuzz_is_stun_tcp)
@zip -q -j $@ $(files_corpus_fuzz_is_stun_tcp)
files_corpus_fuzz_libinjection := $(wildcard $(srcdir)/corpus/fuzz_libinjection/*)
fuzz_libinjection_seed_corpus.zip: $(files_corpus_fuzz_libinjection)
@zip -q -j $@ $(files_corpus_fuzz_libinjection)
files_corpus_fuzz_tls_certificate := $(wildcard $(srcdir)/corpus/fuzz_tls_certificate/*)
fuzz_tls_certificate_seed_corpus.zip: $(files_corpus_fuzz_tls_certificate)
@zip -q -j $@ $(files_corpus_fuzz_tls_certificate)
files_corpus_fuzz_filecfg_protocols := $(wildcard $(srcdir)/corpus/fuzz_filecfg_protocols/*)
fuzz_filecfg_protocols_seed_corpus.zip: $(files_corpus_fuzz_filecfg_protocols)
@zip -q -j $@ $(files_corpus_fuzz_filecfg_protocols)
files_corpus_fuzz_filecfg_categories := $(wildcard $(srcdir)/corpus/fuzz_filecfg_categories/*)
fuzz_filecfg_categories_seed_corpus.zip: $(files_corpus_fuzz_filecfg_categories)
@zip -q -j $@ $(files_corpus_fuzz_filecfg_categories)
files_corpus_fuzz_filecfg_malicious_sha1 := $(wildcard $(srcdir)/corpus/fuzz_filecfg_malicious_sha1/*)
fuzz_filecfg_malicious_sha1_seed_corpus.zip: $(files_corpus_fuzz_filecfg_malicious_sha1)
@zip -q -j $@ $(files_corpus_fuzz_filecfg_malicious_sha1)
files_corpus_fuzz_filecfg_malicious_ja4 := $(wildcard $(srcdir)/corpus/fuzz_filecfg_malicious_ja4/*)
fuzz_filecfg_malicious_ja4_seed_corpus.zip: $(files_corpus_fuzz_filecfg_malicious_ja4)
@zip -q -j $@ $(files_corpus_fuzz_filecfg_malicious_ja4)
files_corpus_fuzz_filecfg_risk_domains := $(wildcard $(srcdir)/corpus/fuzz_filecfg_risk_domains/*)
fuzz_filecfg_risk_domains_seed_corpus.zip: $(files_corpus_fuzz_filecfg_risk_domains)
@zip -q -j $@ $(files_corpus_fuzz_filecfg_risk_domains)
files_corpus_fuzz_filecfg_config := $(wildcard $(srcdir)/corpus/fuzz_filecfg_config/*)
fuzz_filecfg_config_seed_corpus.zip: $(files_corpus_fuzz_filecfg_config)
@zip -q -j $@ $(files_corpus_fuzz_filecfg_config)
files_corpus_fuzz_filecfg_category := $(wildcard $(srcdir)/corpus/fuzz_filecfg_category/*)
fuzz_filecfg_category_seed_corpus.zip: $(files_corpus_fuzz_filecfg_category)
@zip -q -j $@ $(files_corpus_fuzz_filecfg_category)
# Phony target to build all corpora (incremental build via dependencies)
.PHONY: corpus
corpus: fuzz_ndpi_reader_seed_corpus.zip fuzz_ndpi_reader_alloc_fail_seed_corpus.zip fuzz_ndpi_reader_payload_analyzer_seed_corpus.zip fuzz_quic_get_crypto_data_seed_corpus.zip fuzz_libinjection_seed_corpus.zip fuzz_tls_certificate_seed_corpus.zip fuzz_filecfg_protocols_seed_corpus.zip fuzz_is_stun_udp_seed_corpus.zip fuzz_is_stun_tcp_seed_corpus.zip fuzz_ndpi_reader_pl7m_simplest_seed_corpus.zip fuzz_ndpi_reader_pl7m_seed_corpus.zip fuzz_ndpi_reader_pl7m_64k_seed_corpus.zip fuzz_ndpi_reader_pl7m_simplest_internal_seed_corpus.zip fuzz_ndpi_reader_pl7m_internal_seed_corpus.zip fuzz_ndpi_reader_pl7m_only_subclassification_seed_corpus.zip fuzz_ndpi_reader_pl7m_randomize_ports_seed_corpus.zip fuzz_filecfg_malicious_ja4_seed_corpus.zip fuzz_filecfg_malicious_sha1_seed_corpus.zip fuzz_filecfg_categories_seed_corpus.zip fuzz_filecfg_category_seed_corpus.zip fuzz_filecfg_config_seed_corpus.zip fuzz_filecfg_risk_domains_seed_corpus.zip
@echo "All corpus files are up to date"
@if [ -d "$(srcdir)/corpus" ] && ls $(srcdir)/corpus/fuzz_*seed_corpus.zip >/dev/null 2>&1; then \
echo "Copying pre-built corpus files from source directory..."; \
cp $(srcdir)/corpus/fuzz_*seed_corpus.zip . 2>/dev/null || true; \
fi
# Create dictionaries exactly as expected by oss-fuzz.
# This way, if we need to change/update/add something,
# we don't need to update scripts in oss-fuzz repository
# Incremental: only copy if source dictionary is newer
.PHONY: dictionaries
dictionaries: fuzz_ndpi_reader.dict fuzz_ndpi_reader_alloc_fail.dict fuzz_ndpi_reader_payload_analyzer.dict fuzz_process_packet.dict fuzz_tls_certificate.dict
@echo "All dictionaries are up to date"
fuzz_ndpi_reader.dict: $(srcdir)/dictionary.dict
@cp $(srcdir)/dictionary.dict $@
fuzz_ndpi_reader_alloc_fail.dict: $(srcdir)/dictionary.dict
@cp $(srcdir)/dictionary.dict $@
fuzz_ndpi_reader_payload_analyzer.dict: $(srcdir)/dictionary.dict
@cp $(srcdir)/dictionary.dict $@
fuzz_process_packet.dict: $(srcdir)/dictionary.dict
@cp $(srcdir)/dictionary.dict $@
fuzz_tls_certificate.dict: $(srcdir)/dictionary_tls_certificate.dict
@cp $(srcdir)/dictionary_tls_certificate.dict $@
clean-local:
$(RM) *.o $(bin_PROGRAMS)
$(RM) $(top_builddir)/example/fuzz_*.o
$(RM) $(top_builddir)/src/lib/third_party/src/fuzz_*.o
$(RM) $(top_builddir)/src/lib/third_party/src/fuzz/fuzz_*.o
$(RM) testpcaps.zip
$(RM) *_seed_corpus.zip
$(RM) fuzz*.dict
$(RM) -r .libs .deps
distclean-local:
$(RM) Makefile
distdir:
find $(srcdir) -type d | xargs -I'{}' mkdir -p '$(distdir)/{}'
find $(srcdir) -type f -name '*.c' \
-o -name '*.am' \
-o -name '*.h' \
-o -name '*.cpp' \
-o -name '*.options' \
-o -name 'ipv4_addresses.txt' \
-o -name 'ipv6_addresses.txt' \
-o -name 'bd_param.txt' \
-o -name 'splt_param.txt' \
-o -name 'random_list.list' \
-o -path '$(srcdir)/dictionary.dict' \
-o -path '$(srcdir)/dictionary_tls_certificate.dict' \
-o -path '$(srcdir)/corpus/fuzz_*.zip' \
-o -path '$(srcdir)/corpus/fuzz_quic_get_crypto_data/*' \
-o -path '$(srcdir)/corpus/fuzz_filecfg_protocols/*' \
-o -path '$(srcdir)/corpus/fuzz_filecfg_categories/*' \
-o -path '$(srcdir)/corpus/fuzz_filecfg_malicious_sha1/*' \
-o -path '$(srcdir)/corpus/fuzz_filecfg_malicious_ja4/*' \
-o -path '$(srcdir)/corpus/fuzz_filecfg_risk_domains/*' \
-o -path '$(srcdir)/corpus/fuzz_filecfg_config/*' \
-o -path '$(srcdir)/corpus/fuzz_filecfg_category/*' \
-o -path '$(srcdir)/corpus/fuzz_is_stun_udp/*' \
-o -path '$(srcdir)/corpus/fuzz_is_stun_tcp/*' \
-o -path '$(srcdir)/corpus/fuzz_libinjection/*' \
-o -path '$(srcdir)/corpus/fuzz_tls_certificate/*' | xargs -I'{}' cp -r '{}' '$(distdir)/{}'
find . -type l -name '*.c' | xargs -I'{}' cp -r '{}' '$(distdir)/{}'
all: corpus dictionaries