summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLei Zhang <thestig@chromium.org>2015-10-17 10:29:51 -0700
committerLei Zhang <thestig@chromium.org>2015-10-17 10:29:51 -0700
commit205f582a3a31f314b5a24661c3d573364ec309bb (patch)
tree4381cf7f323546def0693ca98b477bbebb9ff75b
parent96e673ea0e3749698ff45bac4fc4dff7eba71c9a (diff)
downloadpdfium-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.cpp5
-rw-r--r--testing/resources/pixel/bug_543018_1.in61
-rw-r--r--testing/resources/pixel/bug_543018_1_expected.pdf.0.pngbin0 -> 5433 bytes
-rw-r--r--testing/resources/pixel/bug_543018_1_expected_mac.pdf.0.pngbin0 -> 4365 bytes
-rw-r--r--testing/resources/pixel/bug_543018_2.in62
-rw-r--r--testing/resources/pixel/bug_543018_2_expected.pdf.0.pngbin0 -> 5433 bytes
-rw-r--r--testing/resources/pixel/bug_543018_2_expected_mac.pdf.0.pngbin0 -> 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
new file mode 100644
index 0000000000..a044bb0c37
--- /dev/null
+++ b/testing/resources/pixel/bug_543018_1_expected.pdf.0.png
Binary files 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
index 0000000000..e4d57103ef
--- /dev/null
+++ b/testing/resources/pixel/bug_543018_1_expected_mac.pdf.0.png
Binary files differ
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
new file mode 100644
index 0000000000..a044bb0c37
--- /dev/null
+++ b/testing/resources/pixel/bug_543018_2_expected.pdf.0.png
Binary files 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
index 0000000000..e4d57103ef
--- /dev/null
+++ b/testing/resources/pixel/bug_543018_2_expected_mac.pdf.0.png
Binary files differ