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,8 +30,8 @@ LIB_FUZZING_ENGINE ?= $(OBJ_DEFAULT_FUZZ)
30 $(BINS_fuzz): $(TARGETS_libqpdf) $(OBJ_DEFAULT_FUZZ) 30 $(BINS_fuzz): $(TARGETS_libqpdf) $(OBJ_DEFAULT_FUZZ)
31 31
32 # Files from the test suite that are good for seeding the fuzzer. 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 stream-data.pdf \ 35 stream-data.pdf \
36 lin5.pdf \ 36 lin5.pdf \
37 field-types.pdf \ 37 field-types.pdf \
@@ -62,23 +62,28 @@ SEED_CORPUS_FILES = \ @@ -62,23 +62,28 @@ SEED_CORPUS_FILES = \
62 issue-335a.pdf \ 62 issue-335a.pdf \
63 issue-335b.pdf 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 CORPUS_DIR := fuzz/$(OUTPUT_DIR)/qpdf_fuzzer_seed_corpus 73 CORPUS_DIR := fuzz/$(OUTPUT_DIR)/qpdf_fuzzer_seed_corpus
69 74
70 .PHONY: fuzz_corpus 75 .PHONY: fuzz_corpus
71 fuzz_corpus:: fuzz/$(OUTPUT_DIR)/fuzz_corpus.stamp 76 fuzz_corpus:: fuzz/$(OUTPUT_DIR)/fuzz_corpus.stamp
72 -$(foreach F,$(CORPUS_FROM_TEST),$(eval \ 77 +$(foreach F,$(CORPUS_EXTRA),$(eval \
73 SHA1_$(notdir $(F)) := $(shell perl fuzz/get_sha1 < $F))) 78 SHA1_$(notdir $(F)) := $(shell perl fuzz/get_sha1 < $F)))
74 -$(foreach F,$(CORPUS_FROM_TEST),$(eval \ 79 +$(foreach F,$(CORPUS_EXTRA),$(eval \
75 fuzz_corpus:: $(CORPUS_DIR)/$(SHA1_$(notdir $(F))))) 80 fuzz_corpus:: $(CORPUS_DIR)/$(SHA1_$(notdir $(F)))))
76 -$(foreach F,$(CORPUS_FROM_TEST),$(eval \ 81 +$(foreach F,$(CORPUS_EXTRA),$(eval \
77 $(CORPUS_DIR)/$(SHA1_$(notdir $(F))): $(F) ; \ 82 $(CORPUS_DIR)/$(SHA1_$(notdir $(F))): $(F) ; \
78 mkdir -p $(CORPUS_DIR); \ 83 mkdir -p $(CORPUS_DIR); \
79 cp $(F) $(CORPUS_DIR)/$(SHA1_$(notdir $(F))))) 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 mkdir -p $(CORPUS_DIR) 87 mkdir -p $(CORPUS_DIR)
83 (cd $(CORPUS_DIR); tar xzf ../../original-corpus.tar.gz) 88 (cd $(CORPUS_DIR); tar xzf ../../original-corpus.tar.gz)
84 touch $@ 89 touch $@
fuzz/qtest/fuzz.test
@@ -10,8 +10,13 @@ require TestDriver; @@ -10,8 +10,13 @@ require TestDriver;
10 my $td = new TestDriver('fuzz'); 10 my $td = new TestDriver('fuzz');
11 11
12 my $qpdf_n_test_files = 29; 12 my $qpdf_n_test_files = 29;
  13 +my @extra = glob("../qpdf_extra/*.fuzz");
  14 +my $qpdf_n_extra_files = scalar(@extra);
13 my $qpdf_n_orig_files = 2559; 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 my @fuzzers = ( 21 my @fuzzers = (
17 ['qpdf' => $qpdf_n_files], 22 ['qpdf' => $qpdf_n_files],