diff --git a/fuzz/CMakeLists.txt b/fuzz/CMakeLists.txt index 75f0db5a..8f3008d5 100644 --- a/fuzz/CMakeLists.txt +++ b/fuzz/CMakeLists.txt @@ -119,6 +119,7 @@ set(CORPUS_OTHER 68668.fuzz 68915.fuzz 69857.fuzz + 69913.fuzz ) set(CORPUS_DIR ${CMAKE_CURRENT_BINARY_DIR}/qpdf_corpus) diff --git a/fuzz/qpdf_extra/69913.fuzz b/fuzz/qpdf_extra/69913.fuzz new file mode 100644 index 00000000..978ade90 Binary files /dev/null and b/fuzz/qpdf_extra/69913.fuzz differ diff --git a/fuzz/qtest/fuzz.test b/fuzz/qtest/fuzz.test index 34169669..6bcbbde4 100644 --- a/fuzz/qtest/fuzz.test +++ b/fuzz/qtest/fuzz.test @@ -21,7 +21,7 @@ my @fuzzers = ( ['pngpredictor' => 1], ['runlength' => 6], ['tiffpredictor' => 2], - ['qpdf' => 61], # increment when adding new files + ['qpdf' => 62], # increment when adding new files ); my $n_tests = 0; diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index ada49f3e..f46885a1 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -905,9 +905,8 @@ QPDF::read_xrefEntry(qpdf_offset_t& f1, int& f2, char& type) if (QUtil::is_space(*p++) && (*p == 'f' || *p == 'n')) { // C++20: [[likely]] type = *p; - ++p; - ++p; // No test for valid line[19]. - if ((*p == '\n' || *p == '\r') && f1_len == 10 && f2_len == 5) { + // No test for valid line[19]. + if (*(++p) && *(++p) && (*p == '\n' || *p == '\r') && f1_len == 10 && f2_len == 5) { // C++20: [[likely]] return true; }