Loosen checking on the bytes following 'stream'
authorJun Fang <jun_fang@foxitsoftware.com>
Fri, 16 Oct 2015 02:45:01 +0000 (10:45 +0800)
committerJun Fang <jun_fang@foxitsoftware.com>
Fri, 16 Oct 2015 02:45:01 +0000 (10:45 +0800)
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
R=thestig@chromium.org, tsepez@chromium.org

Review URL: https://codereview.chromium.org/1401923005 .

core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
testing/resources/pixel/bug_543018_1.in [new file with mode: 0644]
testing/resources/pixel/bug_543018_1_expected.pdf.0.png [new file with mode: 0644]
testing/resources/pixel/bug_543018_1_expected_mac.pdf.0.png [new file with mode: 0644]
testing/resources/pixel/bug_543018_2.in [new file with mode: 0644]
testing/resources/pixel/bug_543018_2_expected.pdf.0.png [new file with mode: 0644]
testing/resources/pixel/bug_543018_2_expected_mac.pdf.0.png [new file with mode: 0644]

index a94e5bb..c9d4f14 100644 (file)
@@ -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 (file)
index 0000000..f8f6515
--- /dev/null
@@ -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
new file mode 100644 (file)
index 0000000..a044bb0
Binary files /dev/null and b/testing/resources/pixel/bug_543018_1_expected.pdf.0.png differ
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
new file mode 100644 (file)
index 0000000..e4d5710
Binary files /dev/null and b/testing/resources/pixel/bug_543018_1_expected_mac.pdf.0.png differ
diff --git a/testing/resources/pixel/bug_543018_2.in b/testing/resources/pixel/bug_543018_2.in
new file mode 100644 (file)
index 0000000..4562e58
--- /dev/null
@@ -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
new file mode 100644 (file)
index 0000000..a044bb0
Binary files /dev/null and b/testing/resources/pixel/bug_543018_2_expected.pdf.0.png differ
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
new file mode 100644 (file)
index 0000000..e4d5710
Binary files /dev/null and b/testing/resources/pixel/bug_543018_2_expected_mac.pdf.0.png differ