diff options
-rw-r--r-- | core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp | 8 | ||||
-rw-r--r-- | testing/resources/pixel/bug_551258_1.in | 60 | ||||
-rw-r--r-- | testing/resources/pixel/bug_551258_1_expected.pdf.0.png | bin | 0 -> 5433 bytes | |||
-rw-r--r-- | testing/resources/pixel/bug_551258_1_expected_mac.pdf.0.png | bin | 0 -> 4365 bytes |
4 files changed, 64 insertions, 4 deletions
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp index b28bbf169b..04aca91082 100644 --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp @@ -2352,11 +2352,11 @@ CPDF_Stream* CPDF_SyntaxParser::ReadStream(CPDF_Dictionary* pDict, m_Pos += ReadEOLMarkers(m_Pos); FXSYS_memset(m_WordBuffer, 0, ENDSTREAM_LEN + 1); GetNextWord(); - if (FXSYS_memcmp(m_WordBuffer, "endstream", ENDSTREAM_LEN) == 0 && - IsWholeWord(m_Pos - ENDSTREAM_LEN, m_FileLen, - FX_BSTRC("endstream").GetPtr(), ENDSTREAM_LEN, TRUE)) { + // Earlier version of PDF specification doesn't require EOL marker before + // 'endstream' keyword. If keyword 'endstream' follows the bytes in + // specified length, it signals the end of stream. + if (FXSYS_memcmp(m_WordBuffer, "endstream", ENDSTREAM_LEN) == 0) bSearchForKeyword = FALSE; - } } if (bSearchForKeyword) { // If len is not available, len needs to be calculated diff --git a/testing/resources/pixel/bug_551258_1.in b/testing/resources/pixel/bug_551258_1.in new file mode 100644 index 0000000000..f254f2d43d --- /dev/null +++ b/testing/resources/pixel/bug_551258_1.in @@ -0,0 +1,60 @@ +{{header}} +{{object 1 0}} << + /Type /Catalog + /Pages 2 0 R +>> +{{object 2 0}} << + /Type /Pages + /MediaBox [ 0 0 200 200 ] + /Count 1 + /Kids [ 3 0 R ] +>> +endobj +{{object 3 0}} << + /Type /Page + /Parent 2 0 R + /Resources << + /Font << + /F1 4 0 R + /F2 5 0 R + >> + >> + /Contents 6 0 R +>> +endobj +{{object 4 0}} << + /Type /Font + /Subtype /Type1 + /BaseFont /Times-Roman +>> +endobj +{{object 5 0}} << + /Type /Font + /Subtype /Type1 + /BaseFont /Helvetica +>> +endobj +% Case 1: +% Earlier version of PDF doesn't require EOL before 'endstream'. If the length +% of bytes end before 'endstream', we should take it. +{{object 6 0}} << + /Length 107 +>> +stream +BT +20 50 Td +/F1 12 Tf +(endobj is text) Tj +endstream +0 50 Td +/F2 13 Tf +(endstream is text per /Length) Tj +ETendstream +endobj +{{xref}} +trailer << + /Size 6 + /Root 1 0 R +>> +{{startxref}} +%%EOF diff --git a/testing/resources/pixel/bug_551258_1_expected.pdf.0.png b/testing/resources/pixel/bug_551258_1_expected.pdf.0.png Binary files differnew file mode 100644 index 0000000000..a044bb0c37 --- /dev/null +++ b/testing/resources/pixel/bug_551258_1_expected.pdf.0.png diff --git a/testing/resources/pixel/bug_551258_1_expected_mac.pdf.0.png b/testing/resources/pixel/bug_551258_1_expected_mac.pdf.0.png Binary files differnew file mode 100644 index 0000000000..e4d57103ef --- /dev/null +++ b/testing/resources/pixel/bug_551258_1_expected_mac.pdf.0.png |