From f0d5b6c35fa343108a3ab7a25bc2cc2b3cf105b3 Mon Sep 17 00:00:00 2001 From: dsinclair Date: Fri, 4 Nov 2016 08:25:34 -0700 Subject: Revert of Remove CPDF_Object::Release() in favor of direct delete (patchset #11 id:200001 of https://codereview.chromium.org/2384883003/ ) Reason for revert: Looks like it's blocking the roll. https://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_compile_dbg_ng/builds/186619 Original issue's description: > Remove CPDF_Object::Release() in favor of direct delete > > Follow-on once we prove Release always deletes in previous CL. > > Committed: https://pdfium.googlesource.com/pdfium/+/4de3d095c9d9e961f93750cf1ebd489fd515be12 TBR=thestig@chromium.org,tsepez@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Review-Url: https://codereview.chromium.org/2478253002 --- core/fpdfapi/parser/cpdf_data_avail.cpp | 61 ++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 27 deletions(-) (limited to 'core/fpdfapi/parser/cpdf_data_avail.cpp') diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp index eadbf1e828..a077ebb715 100644 --- a/core/fpdfapi/parser/cpdf_data_avail.cpp +++ b/core/fpdfapi/parser/cpdf_data_avail.cpp @@ -83,12 +83,17 @@ CPDF_DataAvail::CPDF_DataAvail(FileAvail* pFileAvail, CPDF_DataAvail::~CPDF_DataAvail() { m_pHintTables.reset(); - delete m_pLinearized; - delete m_pRoot; - delete m_pTrailer; + if (m_pLinearized) + m_pLinearized->Release(); + + if (m_pRoot) + m_pRoot->Release(); + + if (m_pTrailer) + m_pTrailer->Release(); for (CPDF_Object* pObject : m_arrayAcroforms) - delete pObject; + pObject->Release(); } void CPDF_DataAvail::SetDocument(CPDF_Document* pDoc) { @@ -225,7 +230,7 @@ bool CPDF_DataAvail::CheckAcroFormSubObject(DownloadHints* pHints) { } for (CPDF_Object* pObject : m_arrayAcroforms) - delete pObject; + pObject->Release(); m_arrayAcroforms.clear(); return true; @@ -395,7 +400,9 @@ bool CPDF_DataAvail::CheckInfo(DownloadHints* pHints) { return false; } - delete pInfo; + if (pInfo) + pInfo->Release(); + m_docStatus = (m_bHaveAcroForm ? PDF_DATAAVAIL_ACROFORM : PDF_DATAAVAIL_PAGETREE); @@ -492,7 +499,7 @@ bool CPDF_DataAvail::CheckPage(DownloadHints* pHints) { } if (!pObj->IsDictionary()) { - delete pObj; + pObj->Release(); continue; } @@ -501,7 +508,7 @@ bool CPDF_DataAvail::CheckPage(DownloadHints* pHints) { m_PagesArray.push_back(pObj); continue; } - delete pObj; + pObj->Release(); } m_PageObjList.RemoveAll(); @@ -517,15 +524,15 @@ bool CPDF_DataAvail::CheckPage(DownloadHints* pHints) { continue; if (!GetPageKids(m_pCurrentParser, pPages)) { - delete pPages; + pPages->Release(); while (++i < iPages) - delete m_PagesArray[i]; + m_PagesArray[i]->Release(); m_PagesArray.clear(); m_docStatus = PDF_DATAAVAIL_ERROR; return false; } - delete pPages; + pPages->Release(); } m_PagesArray.clear(); @@ -580,12 +587,12 @@ bool CPDF_DataAvail::CheckPages(DownloadHints* pHints) { } if (!GetPageKids(m_pCurrentParser, pPages)) { - delete pPages; + pPages->Release(); m_docStatus = PDF_DATAAVAIL_ERROR; return false; } - delete pPages; + pPages->Release(); m_docStatus = PDF_DATAAVAIL_PAGE; return true; } @@ -756,7 +763,7 @@ bool CPDF_DataAvail::CheckHintTables(DownloadHints* pHints) { std::unique_ptr pHintTables( new CPDF_HintTables(this, pDict)); - std::unique_ptr pHintStream( + std::unique_ptr> pHintStream( ParseIndirectObjectAt(szHintStart, 0)); CPDF_Stream* pStream = ToStream(pHintStream.get()); if (pStream && pHintTables->LoadHintStream(pStream)) @@ -944,11 +951,11 @@ int32_t CPDF_DataAvail::CheckCrossRefStream(DownloadHints* pHints, if (pName->GetString() == "XRef") { m_Pos += m_parser.m_pSyntax->SavePos(); xref_offset = pObj->GetDict()->GetIntegerFor("Prev"); - delete pObj; + pObj->Release(); return 1; } } - delete pObj; + pObj->Release(); return -1; } pHints->AddSegment(m_Pos, req_size); @@ -1174,7 +1181,7 @@ bool CPDF_DataAvail::CheckTrailer(DownloadHints* pHints) { ScopedFileStream file(FX_CreateMemoryStream(pBuf, (size_t)iSize, false)); m_syntaxParser.InitParser(file.get(), 0); - std::unique_ptr pTrailer( + std::unique_ptr> pTrailer( m_syntaxParser.GetObject(nullptr, 0, 0, true)); if (!pTrailer) { m_Pos += m_syntaxParser.SavePos(); @@ -1259,7 +1266,7 @@ bool CPDF_DataAvail::CheckArrayPageNode(uint32_t dwPageNo, CPDF_Array* pArray = pPages->AsArray(); if (!pArray) { - delete pPages; + pPages->Release(); m_docStatus = PDF_DATAAVAIL_ERROR; return false; } @@ -1274,7 +1281,7 @@ bool CPDF_DataAvail::CheckArrayPageNode(uint32_t dwPageNo, pPageNode->m_childNode.Add(pNode); pNode->m_dwPageNo = pKid->GetRefObjNum(); } - delete pPages; + pPages->Release(); return true; } @@ -1297,12 +1304,12 @@ bool CPDF_DataAvail::CheckUnkownPageNode(uint32_t dwPageNo, if (pPage->IsArray()) { pPageNode->m_dwPageNo = dwPageNo; pPageNode->m_type = PDF_PAGENODE_ARRAY; - delete pPage; + pPage->Release(); return true; } if (!pPage->IsDictionary()) { - delete pPage; + pPage->Release(); m_docStatus = PDF_DATAAVAIL_ERROR; return false; } @@ -1343,11 +1350,11 @@ bool CPDF_DataAvail::CheckUnkownPageNode(uint32_t dwPageNo, } else if (type == "Page") { pPageNode->m_type = PDF_PAGENODE_PAGE; } else { - delete pPage; + pPage->Release(); m_docStatus = PDF_DATAAVAIL_ERROR; return false; } - delete pPage; + pPage->Release(); return true; } @@ -1435,23 +1442,23 @@ bool CPDF_DataAvail::CheckPageCount(DownloadHints* pHints) { CPDF_Dictionary* pPagesDict = pPages->GetDict(); if (!pPagesDict) { - delete pPages; + pPages->Release(); m_docStatus = PDF_DATAAVAIL_ERROR; return false; } if (!pPagesDict->KeyExist("Kids")) { - delete pPages; + pPages->Release(); return true; } int count = pPagesDict->GetIntegerFor("Count"); if (count > 0) { - delete pPages; + pPages->Release(); return true; } - delete pPages; + pPages->Release(); return false; } -- cgit v1.2.3