From fbc7449fa39b5ad3424a80bda0e8563db546a58b Mon Sep 17 00:00:00 2001 From: JUN FANG Date: Fri, 3 Apr 2015 11:35:50 -0700 Subject: Merge to XFA: 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 --- core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp | 7 +++---- .../fpdf_parser/fpdf_parser_parser_embeddertest.cpp | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_embeddertest.cpp (limited to 'core/src/fpdfapi/fpdf_parser') diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp index ad8adc1c1c..862852e7b7 100644 --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp @@ -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 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"))); +} + -- cgit v1.2.3