From 072a24fbc055e84198ce95b7b7b264933a43e8db Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Mon, 6 Apr 2015 15:58:30 -0700 Subject: Add embedder test comparing with the last patch. 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 (cherry picked from commit e26ddf5eb0400c85680a865b6d4ddff293167169) Review URL: https://codereview.chromium.org/1061033004 --- BUILD.gn | 1 + .../src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp | 7 ++- .../fpdf_parser_parser_embeddertest.cpp | 14 ++++++ pdfium.gyp | 1 + testing/resources/bug_459580.in | 47 ++++++++++++++++++ testing/resources/bug_459580.pdf | 57 ++++++++++++++++++++++ 6 files changed, 123 insertions(+), 4 deletions(-) create mode 100644 core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_embeddertest.cpp create mode 100644 testing/resources/bug_459580.in create mode 100644 testing/resources/bug_459580.pdf diff --git a/BUILD.gn b/BUILD.gn index b21a766bd9..6a3c4bf03c 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -867,6 +867,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", diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp index 4ed4c70e27..592f24f40b 100644 --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp @@ -1573,11 +1573,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 index 0000000000..473c6eac10 --- /dev/null +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_embeddertest.cpp @@ -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"))); +} + diff --git a/pdfium.gyp b/pdfium.gyp index d22375f18a..7b0191df3a 100644 --- a/pdfium.gyp +++ b/pdfium.gyp @@ -856,6 +856,7 @@ '<(DEPTH)' ], '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 index 0000000000..f20c141bc9 --- /dev/null +++ b/testing/resources/bug_459580.in @@ -0,0 +1,47 @@ +{{header}} +{{object 1 0}} << + /Type /Catalog + /Pages 2 0 R +>> +{{object 2 0}} << + /Type /Pages + /MediaBox [ 0 0 600 600 ] + /Count 1 + /Kids [ 3 0 R ] +>> +endobj +{{object 3 0}} << + /Type /Page + /Parent 2 0 R + /Resources << + /Font << + /F1 4 0 R + >> + >> + /Contents 6 0 R +>> +endobj +{{object 4 0}} << + /Type /Font + /Subtype /Type1 + /BaseFont /Times-Roman +>> +endobj + +{{object 6 0}} << +>> +stream +BT +/F1 12 Tf +200 500 Td +(Hello, world! This is a test pdf for bug 459580.) Tj +ET +endstream +endobj +{{xref}} +trailer << + /$$ze 6 + /Root 1 0 R +>> +{{startxref}} +%%EOF diff --git a/testing/resources/bug_459580.pdf b/testing/resources/bug_459580.pdf new file mode 100644 index 0000000000..af33efcaec --- /dev/null +++ b/testing/resources/bug_459580.pdf @@ -0,0 +1,57 @@ +%PDF-1.7 +% ò¤ô +1 0 obj << + /Type /Catalog + /Pages 2 0 R +>> +2 0 obj << + /Type /Pages + /MediaBox [ 0 0 600 600 ] + /Count 1 + /Kids [ 3 0 R ] +>> +endobj +3 0 obj << + /Type /Page + /Parent 2 0 R + /Resources << + /Font << + /F1 4 0 R + >> + >> + /Contents 6 0 R +>> +endobj +4 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /Times-Roman +>> +endobj + +6 0 obj << +>> +stream +BT +/F1 12 Tf +200 500 Td +(Hello, world! This is a test pdf for bug 459580.) Tj +ET +endstream +endobj +xref +0 7 +0000000000 65535 f +0000000015 00000 n +0000000061 00000 n +0000000154 00000 n +0000000374 00000 n +0000000000 65535 f +0000000450 00000 n +trailer << + /$$ze 6 + /Root 1 0 R +>> +startxref +963 +%%EOF -- cgit v1.2.3