From 12ff1eba3eaa4a27089f1837a0826dfcac163db2 Mon Sep 17 00:00:00 2001 From: tsepez Date: Mon, 21 Nov 2016 17:47:29 -0800 Subject: Avoid calls to WrapUnique in CPDF_streamparser Review-Url: https://codereview.chromium.org/2520953004 --- core/fpdfapi/page/cpdf_streamcontentparser.cpp | 16 ++++++---------- core/fpdfapi/page/cpdf_streamparser.cpp | 5 ++--- core/fpdfapi/page/pageint.h | 7 ++++--- 3 files changed, 12 insertions(+), 16 deletions(-) (limited to 'core') diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp index 8c6038d626..2bc80cc5c9 100644 --- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp +++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp @@ -630,8 +630,8 @@ void CPDF_StreamContentParser::Handle_BeginMarkedContent_Dictionary() { void CPDF_StreamContentParser::Handle_BeginImage() { FX_FILESIZE savePos = m_pSyntax->GetPos(); - CPDF_Dictionary* pDict = - new CPDF_Dictionary(m_pDocument->GetByteStringPool()); + auto pDict = + pdfium::MakeUnique(m_pDocument->GetByteStringPool()); while (1) { CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement(); if (type == CPDF_StreamParser::Keyword) { @@ -639,7 +639,6 @@ void CPDF_StreamContentParser::Handle_BeginImage() { m_pSyntax->GetWordSize()); if (bsKeyword != "ID") { m_pSyntax->SetPos(savePos); - delete pDict; return; } } @@ -657,7 +656,7 @@ void CPDF_StreamContentParser::Handle_BeginImage() { pDict->SetFor(key, std::move(pObj)); } } - ReplaceAbbr(pDict); + ReplaceAbbr(pDict.get()); CPDF_Object* pCSObj = nullptr; if (pDict->KeyExist("ColorSpace")) { pCSObj = pDict->GetDirectObjectFor("ColorSpace"); @@ -671,9 +670,8 @@ void CPDF_StreamContentParser::Handle_BeginImage() { } } pDict->SetNewFor("Subtype", "Image"); - std::unique_ptr pStream( - m_pSyntax->ReadInlineStream(m_pDocument, pDict, pCSObj)); - bool bGaveDictAway = !!pStream; + std::unique_ptr pStream = + m_pSyntax->ReadInlineStream(m_pDocument, std::move(pDict), pCSObj); while (1) { CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement(); if (type == CPDF_StreamParser::EndOfData) { @@ -687,9 +685,7 @@ void CPDF_StreamContentParser::Handle_BeginImage() { break; } } - CPDF_ImageObject* pImgObj = AddImage(std::move(pStream)); - if (!pImgObj && !bGaveDictAway) - delete pDict; + AddImage(std::move(pStream)); } void CPDF_StreamContentParser::Handle_BeginMarkedContent() { diff --git a/core/fpdfapi/page/cpdf_streamparser.cpp b/core/fpdfapi/page/cpdf_streamparser.cpp index 2901d3b50b..7b0bf6ae03 100644 --- a/core/fpdfapi/page/cpdf_streamparser.cpp +++ b/core/fpdfapi/page/cpdf_streamparser.cpp @@ -128,7 +128,7 @@ CPDF_StreamParser::~CPDF_StreamParser() {} std::unique_ptr CPDF_StreamParser::ReadInlineStream( CPDF_Document* pDoc, - CPDF_Dictionary* pDict, + std::unique_ptr pDict, CPDF_Object* pCSObj) { if (m_Pos == m_Size) return nullptr; @@ -231,8 +231,7 @@ std::unique_ptr CPDF_StreamParser::ReadInlineStream( m_Pos += dwStreamSize; } pDict->SetNewFor("Length", (int)dwStreamSize); - return pdfium::MakeUnique(pData, dwStreamSize, - pdfium::WrapUnique(pDict)); + return pdfium::MakeUnique(pData, dwStreamSize, std::move(pDict)); } CPDF_StreamParser::SyntaxType CPDF_StreamParser::ParseNextElement() { diff --git a/core/fpdfapi/page/pageint.h b/core/fpdfapi/page/pageint.h index cf3522d44a..49a4845e96 100644 --- a/core/fpdfapi/page/pageint.h +++ b/core/fpdfapi/page/pageint.h @@ -61,9 +61,10 @@ class CPDF_StreamParser { std::unique_ptr GetObject() { return std::move(m_pLastObj); } std::unique_ptr ReadNextObject(bool bAllowNestedArray, uint32_t dwInArrayLevel); - std::unique_ptr ReadInlineStream(CPDF_Document* pDoc, - CPDF_Dictionary* pDict, - CPDF_Object* pCSObj); + std::unique_ptr ReadInlineStream( + CPDF_Document* pDoc, + std::unique_ptr pDict, + CPDF_Object* pCSObj); private: friend class cpdf_streamparser_ReadHexString_Test; -- cgit v1.2.3