diff --git a/fuzz/CMakeLists.txt b/fuzz/CMakeLists.txt index d492bfe..98c980d 100644 --- a/fuzz/CMakeLists.txt +++ b/fuzz/CMakeLists.txt @@ -121,6 +121,7 @@ set(CORPUS_OTHER 69857.fuzz 69913.fuzz 69969.fuzz + 69977.fuzz ) set(CORPUS_DIR ${CMAKE_CURRENT_BINARY_DIR}/qpdf_corpus) diff --git a/fuzz/qpdf_extra/69977.fuzz b/fuzz/qpdf_extra/69977.fuzz new file mode 100644 index 0000000..f15c5c9 --- /dev/null +++ b/fuzz/qpdf_extra/69977.fuzz diff --git a/fuzz/qpdf_fuzzer.cc b/fuzz/qpdf_fuzzer.cc index 678bec8..814c59c 100644 --- a/fuzz/qpdf_fuzzer.cc +++ b/fuzz/qpdf_fuzzer.cc @@ -173,11 +173,11 @@ FuzzHelper::doChecks() { // Get as much coverage as possible in parts of the library that // might benefit from fuzzing. - std::cout << "starting testWrite\n"; + std::cerr << "\ninfo: starting testWrite\n"; testWrite(); - std::cout << "\nstarting testPages\n\n"; + std::cerr << "\ninfo: starting testPages\n"; testPages(); - std::cout << "\nstarting testOutlines\n\n"; + std::cerr << "\ninfo: starting testOutlines\n"; testOutlines(); } diff --git a/fuzz/qtest/fuzz.test b/fuzz/qtest/fuzz.test index fffecc1..49ae52d 100644 --- a/fuzz/qtest/fuzz.test +++ b/fuzz/qtest/fuzz.test @@ -21,7 +21,7 @@ my @fuzzers = ( ['pngpredictor' => 1], ['runlength' => 6], ['tiffpredictor' => 2], - ['qpdf' => 63], # increment when adding new files + ['qpdf' => 64], # increment when adding new files ); my $n_tests = 0; diff --git a/libqpdf/Pl_DCT.cc b/libqpdf/Pl_DCT.cc index 5875a0e..d2544ab 100644 --- a/libqpdf/Pl_DCT.cc +++ b/libqpdf/Pl_DCT.cc @@ -320,7 +320,7 @@ Pl_DCT::decompress(void* cinfo_p, Buffer* b) cinfo->mem->max_memory_to_use = 1'000'000'000; // For some corrupt files the memory used internally by libjpeg stays within the above limits // even though the size written to the next pipeline is significantly larger. - m->corrupt_data_limit = 100'000'000; + m->corrupt_data_limit = 10'000'000; #endif jpeg_buffer_src(cinfo, b); diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index f46885a..dec9742 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -494,6 +494,13 @@ QPDF::warn(QPDFExc const& e) { m->warnings.push_back(e); if (!m->suppress_warnings) { +#ifdef QPDF_OSS_FUZZ + if (m->warnings.size() > 20) { + *m->log->getWarn() << "WARNING: too many warnings - additional warnings surpressed\n"; + m->suppress_warnings = true; + return; + } +#endif *m->log->getWarn() << "WARNING: " << m->warnings.back().what() << "\n"; } }