Index: fpdfsdk/fpdfppo.cpp |
diff --git a/fpdfsdk/fpdfppo.cpp b/fpdfsdk/fpdfppo.cpp |
index 8a46ea4067db55a118df3fc6a47353e745cee908..023c41a7501f4e29e6c36a1b26608ac8ce0f809c 100644 |
--- a/fpdfsdk/fpdfppo.cpp |
+++ b/fpdfsdk/fpdfppo.cpp |
@@ -70,9 +70,9 @@ FX_BOOL CPDF_PageOrganizer::PDFDocInit(CPDF_Document* pDestPDFDoc, |
CPDF_Dictionary* pNewPages = |
pElement ? ToDictionary(pElement->GetDirect()) : nullptr; |
if (!pNewPages) { |
- pNewPages = new CPDF_Dictionary(pDestPDFDoc->GetByteStringPool()); |
- pNewRoot->SetReferenceFor("Pages", pDestPDFDoc, |
- pDestPDFDoc->AddIndirectObject(pNewPages)); |
+ pNewPages = |
+ pDestPDFDoc->AddIndirectDictionary(pDestPDFDoc->GetByteStringPool()); |
+ pNewRoot->SetReferenceFor("Pages", pDestPDFDoc, pNewPages); |
} |
CFX_ByteString cbPageType = pNewPages->GetStringFor("Type", ""); |
@@ -83,7 +83,7 @@ FX_BOOL CPDF_PageOrganizer::PDFDocInit(CPDF_Document* pDestPDFDoc, |
if (!pNewPages->GetArrayFor("Kids")) { |
pNewPages->SetIntegerFor("Count", 0); |
pNewPages->SetReferenceFor("Kids", pDestPDFDoc, |
- pDestPDFDoc->AddIndirectObject(new CPDF_Array)); |
+ pDestPDFDoc->AddIndirectArray()); |
} |
return TRUE; |
@@ -277,7 +277,7 @@ uint32_t CPDF_PageOrganizer::GetNewObjId(CPDF_Document* pDoc, |
if (!pDirect) |
return 0; |
- CPDF_Object* pClone = pDirect->Clone(); |
+ UniqueObject pClone(pDirect->Clone()); |
if (!pClone) |
return 0; |
@@ -294,10 +294,11 @@ uint32_t CPDF_PageOrganizer::GetNewObjId(CPDF_Document* pDoc, |
} |
} |
} |
- dwNewObjNum = pDoc->AddIndirectObject(pClone); |
+ CPDF_Object* pUnowned = pDoc->AddIndirectObject(std::move(pClone)); |
+ dwNewObjNum = pUnowned->GetObjNum(); |
(*pObjNumberMap)[dwObjnum] = dwNewObjNum; |
- if (!UpdateReference(pClone, pDoc, pObjNumberMap)) { |
- pClone->Release(); |
+ if (!UpdateReference(pUnowned, pDoc, pObjNumberMap)) { |
+ pDoc->DeleteIndirectObject(dwNewObjNum); |
return 0; |
} |
return dwNewObjNum; |