diff options
author | Lei Zhang <thestig@chromium.org> | 2017-08-02 17:41:22 -0700 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-08-03 01:05:51 +0000 |
commit | d1a8458e6390103e123e9d265040b3d02c16955b (patch) | |
tree | 3b169237c62b6b6210722ed403314b52aea34d8f /core/fpdfapi/parser/cpdf_parser.cpp | |
parent | f44812cf6d7559dd2a0bbc25a684e54675f4794d (diff) | |
download | pdfium-d1a8458e6390103e123e9d265040b3d02c16955b.tar.xz |
Avoid a redundant header offset check in CPDF_Parser.
CPDF_Parser::StartLinearizedParse() calls StartParse(), but already
knows the PDF header offset. Refactor StartParse() so it does not have
to look for the header again.
Change-Id: Id8cc39301ae72da868dafc53921622d5b28ce26e
Reviewed-on: https://pdfium-review.googlesource.com/9830
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Art Snake <art-snake@yandex-team.ru>
Diffstat (limited to 'core/fpdfapi/parser/cpdf_parser.cpp')
-rw-r--r-- | core/fpdfapi/parser/cpdf_parser.cpp | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp index e33cec0165..d669f24674 100644 --- a/core/fpdfapi/parser/cpdf_parser.cpp +++ b/core/fpdfapi/parser/cpdf_parser.cpp @@ -148,14 +148,26 @@ void CPDF_Parser::ShrinkObjectMap(uint32_t objnum) { CPDF_Parser::Error CPDF_Parser::StartParse( const CFX_RetainPtr<IFX_SeekableReadStream>& pFileAccess, CPDF_Document* pDocument) { + return StartParseInternal(pFileAccess, pDocument, kInvalidHeaderOffset); +} + +CPDF_Parser::Error CPDF_Parser::StartParseInternal( + const CFX_RetainPtr<IFX_SeekableReadStream>& pFileAccess, + CPDF_Document* pDocument, + int32_t iHeaderOffset) { ASSERT(!m_bHasParsed); m_bHasParsed = true; m_bXRefStream = false; m_LastXRefOffset = 0; - int32_t offset = GetHeaderOffset(pFileAccess); - if (offset == -1) - return FORMAT_ERROR; + int32_t offset; + if (iHeaderOffset == kInvalidHeaderOffset) { + offset = GetHeaderOffset(pFileAccess); + if (offset == kInvalidHeaderOffset) + return FORMAT_ERROR; + } else { + offset = iHeaderOffset; + } m_pSyntax->InitParser(pFileAccess, offset); @@ -1521,12 +1533,12 @@ CPDF_Parser::Error CPDF_Parser::StartLinearizedParse( m_LastXRefOffset = 0; int32_t offset = GetHeaderOffset(pFileAccess); - if (offset == -1) + if (offset == kInvalidHeaderOffset) return FORMAT_ERROR; - if (!IsLinearizedFile(pFileAccess, offset)) { - return StartParse(pFileAccess, std::move(pDocument)); - } + if (!IsLinearizedFile(pFileAccess, offset)) + return StartParseInternal(pFileAccess, std::move(pDocument), offset); + m_bHasParsed = true; m_pDocument = pDocument; |