diff options
author | Lei Zhang <thestig@chromium.org> | 2015-10-17 10:29:51 -0700 |
---|---|---|
committer | Lei Zhang <thestig@chromium.org> | 2015-10-17 10:29:51 -0700 |
commit | 205f582a3a31f314b5a24661c3d573364ec309bb (patch) | |
tree | 4381cf7f323546def0693ca98b477bbebb9ff75b | |
parent | 96e673ea0e3749698ff45bac4fc4dff7eba71c9a (diff) | |
download | pdfium-205f582a3a31f314b5a24661c3d573364ec309bb.tar.xz |
Merge to M47: Loosen checking on the bytes following 'stream'
PDF specs say that end of line markers shall follow the
keyword "stream". But a white space before end of line
markers follows this keyword in the test pdf files.
BUG=543018
TBR=tsepez@chromium.org
Review URL: https://codereview.chromium.org/1401923005 .
(cherry picked from commit b5cbfb4cd12b6499912367f9a1e11c666157acb8)
Review URL: https://codereview.chromium.org/1410613004 .
-rw-r--r-- | core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp | 5 | ||||
-rw-r--r-- | testing/resources/pixel/bug_543018_1.in | 61 | ||||
-rw-r--r-- | testing/resources/pixel/bug_543018_1_expected.pdf.0.png | bin | 0 -> 5433 bytes | |||
-rw-r--r-- | testing/resources/pixel/bug_543018_1_expected_mac.pdf.0.png | bin | 0 -> 4365 bytes | |||
-rw-r--r-- | testing/resources/pixel/bug_543018_2.in | 62 | ||||
-rw-r--r-- | testing/resources/pixel/bug_543018_2_expected.pdf.0.png | bin | 0 -> 5433 bytes | |||
-rw-r--r-- | testing/resources/pixel/bug_543018_2_expected_mac.pdf.0.png | bin | 0 -> 4365 bytes |
7 files changed, 125 insertions, 3 deletions
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp index a94e5bb01d..c9d4f142b5 100644 --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp @@ -2437,9 +2437,8 @@ CPDF_Stream* CPDF_SyntaxParser::ReadStream(CPDF_Dictionary* pDict, ((CPDF_Reference*)pLenObj)->GetRefObjNum() != objnum))) { len = pLenObj->GetInteger(); } - // Check whether end of line markers follow the keyword 'stream'. - // The stream starts after end of line markers. - m_Pos += ReadEOLMarkers(m_Pos); + // Locate the start of stream. + ToNextLine(); FX_FILESIZE streamStartPos = m_Pos; if (pContext) { pContext->m_DataStart = streamStartPos; diff --git a/testing/resources/pixel/bug_543018_1.in b/testing/resources/pixel/bug_543018_1.in new file mode 100644 index 0000000000..f8f651506f --- /dev/null +++ b/testing/resources/pixel/bug_543018_1.in @@ -0,0 +1,61 @@ +{{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: +% A white space rather than end of line markers follows the keyword "stream". +% Both should render as text. +{{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 +ET +endstream +endobj +{{xref}} +trailer << + /Size 6 + /Root 1 0 R +>> +{{startxref}} +%%EOF diff --git a/testing/resources/pixel/bug_543018_1_expected.pdf.0.png b/testing/resources/pixel/bug_543018_1_expected.pdf.0.png Binary files differnew file mode 100644 index 0000000000..a044bb0c37 --- /dev/null +++ b/testing/resources/pixel/bug_543018_1_expected.pdf.0.png diff --git a/testing/resources/pixel/bug_543018_1_expected_mac.pdf.0.png b/testing/resources/pixel/bug_543018_1_expected_mac.pdf.0.png Binary files differnew file mode 100644 index 0000000000..e4d57103ef --- /dev/null +++ b/testing/resources/pixel/bug_543018_1_expected_mac.pdf.0.png diff --git a/testing/resources/pixel/bug_543018_2.in b/testing/resources/pixel/bug_543018_2.in new file mode 100644 index 0000000000..4562e58c27 --- /dev/null +++ b/testing/resources/pixel/bug_543018_2.in @@ -0,0 +1,62 @@ +{{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 2: +% Three white spaces and other chars follow the keyword "stream" +% before end of line markers. They should be ignored. The content +% in stream should be rendered as text. +{{object 6 0}} << + /Length 107 +>> +stream "this part will be ignored" +BT +20 50 Td +/F1 12 Tf +(endobj is text) Tj +endstream +0 50 Td +/F2 13 Tf +(endstream is text per /Length) Tj +ET +endstream +endobj +{{xref}} +trailer << + /Size 6 + /Root 1 0 R +>> +{{startxref}} +%%EOF diff --git a/testing/resources/pixel/bug_543018_2_expected.pdf.0.png b/testing/resources/pixel/bug_543018_2_expected.pdf.0.png Binary files differnew file mode 100644 index 0000000000..a044bb0c37 --- /dev/null +++ b/testing/resources/pixel/bug_543018_2_expected.pdf.0.png diff --git a/testing/resources/pixel/bug_543018_2_expected_mac.pdf.0.png b/testing/resources/pixel/bug_543018_2_expected_mac.pdf.0.png Binary files differnew file mode 100644 index 0000000000..e4d57103ef --- /dev/null +++ b/testing/resources/pixel/bug_543018_2_expected_mac.pdf.0.png |