diff options
-rw-r--r-- | core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp | 8 | ||||
-rw-r--r-- | fpdfsdk/src/fpdfview_embeddertest.cpp | 8 | ||||
-rw-r--r-- | testing/resources/bug_213.pdf | 64 |
3 files changed, 75 insertions, 5 deletions
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp index 03bc9aec58..cd22b31238 100644 --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp @@ -378,11 +378,11 @@ FX_BOOL CPDF_Parser::LoadAllCrossRefV4(FX_FILESIZE xrefpos) { } int32_t xrefsize = GetDirectInteger(m_pTrailer, "Size"); - if (xrefsize <= 0 || xrefsize > kMaxXRefSize) { - return FALSE; + if (xrefsize > 0 && xrefsize <= kMaxXRefSize) { + ShrinkObjectMap(xrefsize); + m_V5Type.SetSize(xrefsize); } - ShrinkObjectMap(xrefsize); - m_V5Type.SetSize(xrefsize); + CFX_FileSizeArray CrossRefList; CFX_FileSizeArray XRefStreamList; CrossRefList.Add(xrefpos); diff --git a/fpdfsdk/src/fpdfview_embeddertest.cpp b/fpdfsdk/src/fpdfview_embeddertest.cpp index 670c640668..09d1f07e82 100644 --- a/fpdfsdk/src/fpdfview_embeddertest.cpp +++ b/fpdfsdk/src/fpdfview_embeddertest.cpp @@ -204,6 +204,12 @@ TEST_F(FPDFViewEmbeddertest, Crasher_572871) { EXPECT_TRUE(OpenDocument("bug_572871.pdf")); } +// It tests that document can still be loaded even the trailer has no 'Size' +// field if other information is right. +TEST_F(FPDFViewEmbeddertest, Failed_213) { + EXPECT_TRUE(OpenDocument("bug_213.pdf")); +} + // The following tests pass if the document opens without infinite looping. TEST_F(FPDFViewEmbeddertest, Hang_298) { EXPECT_FALSE(OpenDocument("bug_298.pdf")); @@ -232,4 +238,4 @@ TEST_F(FPDFViewEmbeddertest, Hang_344) { // The test should pass even when the file has circular references to pages. TEST_F(FPDFViewEmbeddertest, Hang_360) { EXPECT_FALSE(OpenDocument("bug_360.pdf")); -}
\ No newline at end of file +} diff --git a/testing/resources/bug_213.pdf b/testing/resources/bug_213.pdf new file mode 100644 index 0000000000..d0e251406b --- /dev/null +++ b/testing/resources/bug_213.pdf @@ -0,0 +1,64 @@ +%PDF-1.7 +% ò¤ô|1 0 obj << + /Type /Catalog + /Pages 2 0 R +>> +2 0 obj << + /Type /Pages + /MediaBox [ 0 0 200 200 ] + /Count 1 + /Kids [ 3 0 R ] +>> +endobj +3 0 obj << + /Type /Page + /Parent 2 0 R + /Resources << + /Font << + /F1 4 0 R + /F2 5 0 R + >> + >> + /Contents 6 0 R +>> +endobj +4 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /Times-Roman +>> +endobj +5 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /Helvetica +>> +endobj +6 0 obj << +>> +stream +BT +20 50 Td +/F1 12 Tf +(Hello, world!) Tj +0 50 Td +/F2 16 Tf +(Goodbye, world!) Tj +ET +endstream +endobj +xref +0 7 +0000000000 65535 f +0000000015 00000 n +0000000061 00000 n +0000000154 00000 n +0000000296 00000 n +0000000374 00000 n +0000000450 00000 n +trailer << + /Root 1 0 R +>> +startxref +571 +%%EOF |