Merge to XFA: Add embedder test comparing with the last patch.
authorJUN FANG <jun_fang@foxitsoftware.com>
Fri, 3 Apr 2015 18:35:50 +0000 (11:35 -0700)
committerJUN FANG <jun_fang@foxitsoftware.com>
Fri, 3 Apr 2015 21:58:34 +0000 (14:58 -0700)
When there is a wrong keyword like '??ze' in the dictionary
of the trailer, PDFium can't recognize it and aborts further
parsing. After this change, PDFium continues even it can't
get the right size at this moment. It will rebuild the cross
reference table later since the size of the table is missing.

BUG=459580
R=tsepez@chromium.org

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

BUILD.gn
core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_embeddertest.cpp [new file with mode: 0644]
pdfium.gyp
testing/resources/bug_459580.in [new file with mode: 0644]
testing/resources/bug_459580.pdf [new file with mode: 0644]

index ab230b4..918df0f 100644 (file)
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1573,6 +1573,7 @@ test("pdfium_unittests") {
 
 test("pdfium_embeddertests") {
   sources = [
+    "core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_embeddertest.cpp",
     "fpdfsdk/src/fpdf_dataavail_embeddertest.cpp",
     "fpdfsdk/src/fpdfdoc_embeddertest.cpp",
     "fpdfsdk/src/fpdfformfill_embeddertest.cpp",
index ad8adc1..862852e 100644 (file)
@@ -1577,11 +1577,10 @@ FX_DWORD CPDF_Parser::StartAsynParse(IFX_FileRead* pFileAccess, FX_BOOL bReParse
             return FALSE;
         }
         FX_INT32 xrefsize = GetDirectInteger(m_pTrailer, FX_BSTRC("Size"));
-        if (xrefsize == 0) {
-            return FALSE;
+        if (xrefsize > 0) {
+            m_CrossRef.SetSize(xrefsize);
+            m_V5Type.SetSize(xrefsize);
         }
-        m_CrossRef.SetSize(xrefsize);
-        m_V5Type.SetSize(xrefsize);
     }
     FX_DWORD dwRet = SetEncryptHandler();
     if (dwRet != PDFPARSE_ERROR_SUCCESS) {
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_embeddertest.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_embeddertest.cpp
new file mode 100644 (file)
index 0000000..473c6ea
--- /dev/null
@@ -0,0 +1,14 @@
+// Copyright 2015 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+class FPDFParserEmbeddertest : public EmbedderTest {
+};
+
+Test_F(FPDFParserEmbeddertest, LoadError_454695) {
+    EXPECT_TRUE(OpenDocument("testing/resources/bug_454695.pdf")));
+}
+
index 78b334d..23bae8d 100644 (file)
         '<(DEPTH)/v8/include',
       ],
       'sources': [
+        'core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_embeddertest.cpp',
         'fpdfsdk/src/fpdf_dataavail_embeddertest.cpp',
         'fpdfsdk/src/fpdfdoc_embeddertest.cpp',
         'fpdfsdk/src/fpdfformfill_embeddertest.cpp',
diff --git a/testing/resources/bug_459580.in b/testing/resources/bug_459580.in
new file mode 100644 (file)
index 0000000..f20c141
--- /dev/null
@@ -0,0 +1,47 @@
+{{header}}\r
+{{object 1 0}} <<\r
+  /Type /Catalog\r
+  /Pages 2 0 R\r
+>>\r
+{{object 2 0}} <<\r
+  /Type /Pages\r
+  /MediaBox [ 0 0 600 600 ]\r
+  /Count 1\r
+  /Kids [ 3 0 R ]\r
+>>\r
+endobj\r
+{{object 3 0}} <<\r
+  /Type /Page\r
+  /Parent 2 0 R\r
+  /Resources <<\r
+    /Font <<\r
+      /F1 4 0 R\r
+    >>\r
+  >>\r
+  /Contents 6 0 R\r
+>>\r
+endobj\r
+{{object 4 0}} <<\r
+  /Type /Font\r
+  /Subtype /Type1\r
+  /BaseFont /Times-Roman\r
+>>\r
+endobj\r
+\r
+{{object 6 0}} <<\r
+>>\r
+stream\r
+BT\r
+/F1 12 Tf\r
+200 500 Td\r
+(Hello, world! This is a test pdf for bug 459580.) Tj\r
+ET\r
+endstream\r
+endobj\r
+{{xref}}\r
+trailer <<\r
+  /$$ze 6\r
+  /Root 1 0 R\r
+>>\r
+{{startxref}}\r
+%%EOF\r
diff --git a/testing/resources/bug_459580.pdf b/testing/resources/bug_459580.pdf
new file mode 100644 (file)
index 0000000..af33efc
--- /dev/null
@@ -0,0 +1,57 @@
+%PDF-1.7\r
+% ò¤ô\r
+1 0 obj <<\r
+  /Type /Catalog\r
+  /Pages 2 0 R\r
+>>\r
+2 0 obj <<\r
+  /Type /Pages\r
+  /MediaBox [ 0 0 600 600 ]\r
+  /Count 1\r
+  /Kids [ 3 0 R ]\r
+>>\r
+endobj\r
+3 0 obj <<\r
+  /Type /Page\r
+  /Parent 2 0 R\r
+  /Resources <<\r
+    /Font <<\r
+      /F1 4 0 R\r
+    >>\r
+  >>\r
+  /Contents 6 0 R\r
+>>\r
+endobj\r
+4 0 obj <<\r
+  /Type /Font\r
+  /Subtype /Type1\r
+  /BaseFont /Times-Roman\r
+>>\r
+endobj\r
+\r
+6 0 obj <<\r
+>>\r
+stream\r
+BT\r
+/F1 12 Tf\r
+200 500 Td\r
+(Hello, world! This is a test pdf for bug 459580.) Tj\r
+ET\r
+endstream\r
+endobj\r
+xref\r
+0 7\r
+0000000000 65535 f \r
+0000000015 00000 n \r
+0000000061 00000 n \r
+0000000154 00000 n \r
+0000000374 00000 n \r
+0000000000 65535 f \r
+0000000450 00000 n \r
+trailer <<\r
+  /$$ze 6\r
+  /Root 1 0 R\r
+>>\r
+startxref\r
+963\r
+%%EOF\r