Commit ecca87d73c918bb52db0cbddf00d7bdb84bdda25

Authored by Jay Berkenbilt
1 parent 9ebb55af

Fuzz build: allow easy addition of test files

fuzz/build.mk
... ... @@ -30,8 +30,8 @@ LIB_FUZZING_ENGINE ?= $(OBJ_DEFAULT_FUZZ)
30 30 $(BINS_fuzz): $(TARGETS_libqpdf) $(OBJ_DEFAULT_FUZZ)
31 31  
32 32 # Files from the test suite that are good for seeding the fuzzer.
33   -# Update $n_test_files in qtest/fuzz.test if you change this list.
34   -SEED_CORPUS_FILES = \
  33 +# Update $qpdf_n_test_files in qtest/fuzz.test if you change this list.
  34 +CORPUS_FROM_TEST = \
35 35 stream-data.pdf \
36 36 lin5.pdf \
37 37 field-types.pdf \
... ... @@ -62,23 +62,28 @@ SEED_CORPUS_FILES = \
62 62 issue-335a.pdf \
63 63 issue-335b.pdf
64 64  
  65 +# Any file that qpdf_fuzzer should be tested with can be named
  66 +# something.fuzz and dropped into this directory.
  67 +CORPUS_OTHER = $(wildcard fuzz/qpdf_extra/*.fuzz)
  68 +
65 69 # -----
66 70  
67   -CORPUS_FROM_TEST := $(foreach F,$(SEED_CORPUS_FILES),qpdf/qtest/qpdf/$F)
  71 +CORPUS_EXTRA := $(foreach F,$(CORPUS_FROM_TEST),qpdf/qtest/qpdf/$F) \
  72 + $(CORPUS_OTHER)
68 73 CORPUS_DIR := fuzz/$(OUTPUT_DIR)/qpdf_fuzzer_seed_corpus
69 74  
70 75 .PHONY: fuzz_corpus
71 76 fuzz_corpus:: fuzz/$(OUTPUT_DIR)/fuzz_corpus.stamp
72   -$(foreach F,$(CORPUS_FROM_TEST),$(eval \
  77 +$(foreach F,$(CORPUS_EXTRA),$(eval \
73 78 SHA1_$(notdir $(F)) := $(shell perl fuzz/get_sha1 < $F)))
74   -$(foreach F,$(CORPUS_FROM_TEST),$(eval \
  79 +$(foreach F,$(CORPUS_EXTRA),$(eval \
75 80 fuzz_corpus:: $(CORPUS_DIR)/$(SHA1_$(notdir $(F)))))
76   -$(foreach F,$(CORPUS_FROM_TEST),$(eval \
  81 +$(foreach F,$(CORPUS_EXTRA),$(eval \
77 82 $(CORPUS_DIR)/$(SHA1_$(notdir $(F))): $(F) ; \
78 83 mkdir -p $(CORPUS_DIR); \
79 84 cp $(F) $(CORPUS_DIR)/$(SHA1_$(notdir $(F)))))
80 85  
81   -fuzz/$(OUTPUT_DIR)/fuzz_corpus.stamp: fuzz/original-corpus.tar.gz $(CORPUS_FROM_TEST)
  86 +fuzz/$(OUTPUT_DIR)/fuzz_corpus.stamp: fuzz/original-corpus.tar.gz $(CORPUS_EXTRA)
82 87 mkdir -p $(CORPUS_DIR)
83 88 (cd $(CORPUS_DIR); tar xzf ../../original-corpus.tar.gz)
84 89 touch $@
... ...
fuzz/qtest/fuzz.test
... ... @@ -10,8 +10,13 @@ require TestDriver;
10 10 my $td = new TestDriver('fuzz');
11 11  
12 12 my $qpdf_n_test_files = 29;
  13 +my @extra = glob("../qpdf_extra/*.fuzz");
  14 +my $qpdf_n_extra_files = scalar(@extra);
13 15 my $qpdf_n_orig_files = 2559;
14   -my $qpdf_n_files = $qpdf_n_test_files + $qpdf_n_orig_files;
  16 +my $qpdf_n_files = ($qpdf_n_test_files +
  17 + $qpdf_n_extra_files +
  18 + $qpdf_n_orig_files);
  19 +
15 20  
16 21 my @fuzzers = (
17 22 ['qpdf' => $qpdf_n_files],
... ...