2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-05-29 16:30:53 +00:00

Fuzz build: allow easy addition of test files

This commit is contained in:
Jay Berkenbilt 2019-08-24 14:48:17 -04:00
parent 9ebb55aff1
commit ecca87d73c
2 changed files with 18 additions and 8 deletions

View File

@ -30,8 +30,8 @@ LIB_FUZZING_ENGINE ?= $(OBJ_DEFAULT_FUZZ)
$(BINS_fuzz): $(TARGETS_libqpdf) $(OBJ_DEFAULT_FUZZ) $(BINS_fuzz): $(TARGETS_libqpdf) $(OBJ_DEFAULT_FUZZ)
# Files from the test suite that are good for seeding the fuzzer. # 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. # Update $qpdf_n_test_files in qtest/fuzz.test if you change this list.
SEED_CORPUS_FILES = \ CORPUS_FROM_TEST = \
stream-data.pdf \ stream-data.pdf \
lin5.pdf \ lin5.pdf \
field-types.pdf \ field-types.pdf \
@ -62,23 +62,28 @@ SEED_CORPUS_FILES = \
issue-335a.pdf \ issue-335a.pdf \
issue-335b.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 CORPUS_DIR := fuzz/$(OUTPUT_DIR)/qpdf_fuzzer_seed_corpus
.PHONY: fuzz_corpus .PHONY: fuzz_corpus
fuzz_corpus:: fuzz/$(OUTPUT_DIR)/fuzz_corpus.stamp 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))) 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))))) fuzz_corpus:: $(CORPUS_DIR)/$(SHA1_$(notdir $(F)))))
$(foreach F,$(CORPUS_FROM_TEST),$(eval \ $(foreach F,$(CORPUS_EXTRA),$(eval \
$(CORPUS_DIR)/$(SHA1_$(notdir $(F))): $(F) ; \ $(CORPUS_DIR)/$(SHA1_$(notdir $(F))): $(F) ; \
mkdir -p $(CORPUS_DIR); \ mkdir -p $(CORPUS_DIR); \
cp $(F) $(CORPUS_DIR)/$(SHA1_$(notdir $(F))))) 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) mkdir -p $(CORPUS_DIR)
(cd $(CORPUS_DIR); tar xzf ../../original-corpus.tar.gz) (cd $(CORPUS_DIR); tar xzf ../../original-corpus.tar.gz)
touch $@ touch $@

View File

@ -10,8 +10,13 @@ require TestDriver;
my $td = new TestDriver('fuzz'); my $td = new TestDriver('fuzz');
my $qpdf_n_test_files = 29; 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_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 = ( my @fuzzers = (
['qpdf' => $qpdf_n_files], ['qpdf' => $qpdf_n_files],