diff options
author | Jay Berkenbilt <ejb@ql.org> | 2019-06-15 17:37:10 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2019-06-15 23:24:24 +0200 |
commit | bcfa407912dde624cc64e9d19d0ad1eb10c62247 (patch) | |
tree | 3e6d441e05d3835e91f51b22254c5ec539471b18 /fuzz/qtest | |
parent | e2c77bab89f9ac7d55b52697589feaf9afcf6c07 (diff) | |
download | qpdf-bcfa407912dde624cc64e9d19d0ad1eb10c62247.tar.zst |
As a test suite, run stand-alone fuzzer on seed corpus
Temporarily skip fuzz tests on Windows. There are Windows-specific
failures to address later.
Diffstat (limited to 'fuzz/qtest')
-rw-r--r-- | fuzz/qtest/fuzz.test | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/fuzz/qtest/fuzz.test b/fuzz/qtest/fuzz.test new file mode 100644 index 00000000..d359a573 --- /dev/null +++ b/fuzz/qtest/fuzz.test @@ -0,0 +1,52 @@ +#!/usr/bin/env perl +require 5.008; +use warnings; +use strict; +use Digest::SHA; +use File::Basename; + +require TestDriver; + +my $td = new TestDriver('fuzz'); + +if (($^O eq 'MSWin32') || ($^O eq 'msys')) +{ + $td->emphasize("temporarily skipping fuzz tests in Windows"); + $td->report(0); + exit(0); +} + +my @files = glob("../qpdf_fuzzer_seed_corpus/*"); +my $n_test_files = 27; +my $n_orig_files = 2559; +my $n_files = $n_test_files + $n_orig_files; + +if (scalar(@files) != $n_files) +{ + die "wrong number of files seen in fuzz.test"; +} + +foreach my $f (@files) +{ + my $sum = basename($f); + $td->runtest("checksum $sum", + {$td->STRING => get_sha1_checksum($f)}, + {$td->STRING => $sum}); + $td->runtest("fuzz check $sum", + {$td->COMMAND => "qpdf_fuzzer $f"}, + {$td->REGEXP => ".*$f successful\n", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +} + +$td->report(2 * $n_files); + +sub get_sha1_checksum +{ + my $file = shift; + open(F, "<$file") or fatal("can't open $file: $!"); + binmode F; + my $digest = Digest::SHA->new('sha1')->addfile(*F)->hexdigest; + close(F); + $digest; +} |