aboutsummaryrefslogtreecommitdiffstats
path: root/fuzz
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2019-08-24 20:48:17 +0200
committerJay Berkenbilt <ejb@ql.org>2019-08-26 04:52:25 +0200
commitecca87d73c918bb52db0cbddf00d7bdb84bdda25 (patch)
treed98334598ce1c2fe35a7c620256b8401581a3d53 /fuzz
parent9ebb55aff1e24ff48545a67bc12d0e1918d779dd (diff)
downloadqpdf-ecca87d73c918bb52db0cbddf00d7bdb84bdda25.tar.zst
Fuzz build: allow easy addition of test files
Diffstat (limited to 'fuzz')
-rw-r--r--fuzz/build.mk19
-rw-r--r--fuzz/qtest/fuzz.test7
2 files changed, 18 insertions, 8 deletions
diff --git a/fuzz/build.mk b/fuzz/build.mk
index 44db5326..ec3bd61e 100644
--- a/fuzz/build.mk
+++ b/fuzz/build.mk
@@ -30,8 +30,8 @@ LIB_FUZZING_ENGINE ?= $(OBJ_DEFAULT_FUZZ)
$(BINS_fuzz): $(TARGETS_libqpdf) $(OBJ_DEFAULT_FUZZ)
# Files from the test suite that are good for seeding the fuzzer.
-# Update $n_test_files in qtest/fuzz.test if you change this list.
-SEED_CORPUS_FILES = \
+# Update $qpdf_n_test_files in qtest/fuzz.test if you change this list.
+CORPUS_FROM_TEST = \
stream-data.pdf \
lin5.pdf \
field-types.pdf \
@@ -62,23 +62,28 @@ SEED_CORPUS_FILES = \
issue-335a.pdf \
issue-335b.pdf
+# Any file that qpdf_fuzzer should be tested with can be named
+# something.fuzz and dropped into this directory.
+CORPUS_OTHER = $(wildcard fuzz/qpdf_extra/*.fuzz)
+
# -----
-CORPUS_FROM_TEST := $(foreach F,$(SEED_CORPUS_FILES),qpdf/qtest/qpdf/$F)
+CORPUS_EXTRA := $(foreach F,$(CORPUS_FROM_TEST),qpdf/qtest/qpdf/$F) \
+ $(CORPUS_OTHER)
CORPUS_DIR := fuzz/$(OUTPUT_DIR)/qpdf_fuzzer_seed_corpus
.PHONY: fuzz_corpus
fuzz_corpus:: fuzz/$(OUTPUT_DIR)/fuzz_corpus.stamp
-$(foreach F,$(CORPUS_FROM_TEST),$(eval \
+$(foreach F,$(CORPUS_EXTRA),$(eval \
SHA1_$(notdir $(F)) := $(shell perl fuzz/get_sha1 < $F)))
-$(foreach F,$(CORPUS_FROM_TEST),$(eval \
+$(foreach F,$(CORPUS_EXTRA),$(eval \
fuzz_corpus:: $(CORPUS_DIR)/$(SHA1_$(notdir $(F)))))
-$(foreach F,$(CORPUS_FROM_TEST),$(eval \
+$(foreach F,$(CORPUS_EXTRA),$(eval \
$(CORPUS_DIR)/$(SHA1_$(notdir $(F))): $(F) ; \
mkdir -p $(CORPUS_DIR); \
cp $(F) $(CORPUS_DIR)/$(SHA1_$(notdir $(F)))))
-fuzz/$(OUTPUT_DIR)/fuzz_corpus.stamp: fuzz/original-corpus.tar.gz $(CORPUS_FROM_TEST)
+fuzz/$(OUTPUT_DIR)/fuzz_corpus.stamp: fuzz/original-corpus.tar.gz $(CORPUS_EXTRA)
mkdir -p $(CORPUS_DIR)
(cd $(CORPUS_DIR); tar xzf ../../original-corpus.tar.gz)
touch $@
diff --git a/fuzz/qtest/fuzz.test b/fuzz/qtest/fuzz.test
index dcc68270..c08420f8 100644
--- a/fuzz/qtest/fuzz.test
+++ b/fuzz/qtest/fuzz.test
@@ -10,8 +10,13 @@ require TestDriver;
my $td = new TestDriver('fuzz');
my $qpdf_n_test_files = 29;
+my @extra = glob("../qpdf_extra/*.fuzz");
+my $qpdf_n_extra_files = scalar(@extra);
my $qpdf_n_orig_files = 2559;
-my $qpdf_n_files = $qpdf_n_test_files + $qpdf_n_orig_files;
+my $qpdf_n_files = ($qpdf_n_test_files +
+ $qpdf_n_extra_files +
+ $qpdf_n_orig_files);
+
my @fuzzers = (
['qpdf' => $qpdf_n_files],