Commit ecca87d73c918bb52db0cbddf00d7bdb84bdda25
1 parent
9ebb55af
Fuzz build: allow easy addition of test files
Showing
2 changed files
with
18 additions
and
8 deletions
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], |