Index: core/fpdfapi/parser/cpdf_indirect_object_holder.cpp |
diff --git a/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp b/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp |
index 49567e50a1aa986dc6bd2bdbed6e82511370a7ea..6e549de5a7d069e7b79da6b6c11bad1c6b0a0cd5 100644 |
--- a/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp |
+++ b/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp |
@@ -6,11 +6,8 @@ |
#include "core/fpdfapi/parser/cpdf_indirect_object_holder.h" |
-#include "core/fpdfapi/parser/cpdf_array.h" |
-#include "core/fpdfapi/parser/cpdf_dictionary.h" |
#include "core/fpdfapi/parser/cpdf_object.h" |
#include "core/fpdfapi/parser/cpdf_parser.h" |
-#include "core/fpdfapi/parser/cpdf_stream.h" |
CPDF_IndirectObjectHolder::CPDF_IndirectObjectHolder() : m_LastObjNum(0) {} |
@@ -45,59 +42,35 @@ CPDF_Object* CPDF_IndirectObjectHolder::ParseIndirectObject(uint32_t objnum) { |
return nullptr; |
} |
-CPDF_Object* CPDF_IndirectObjectHolder::AddIndirectObject(UniqueObject pObj) { |
+uint32_t CPDF_IndirectObjectHolder::AddIndirectObject(CPDF_Object* pObj) { |
if (pObj->m_ObjNum) |
- return pObj.release(); // TODO(tsepez): shouldn't happen, stop this leak. |
+ return pObj->m_ObjNum; |
- pObj->m_ObjNum = ++m_LastObjNum; |
+ m_LastObjNum++; |
m_IndirectObjs[m_LastObjNum].release(); // TODO(tsepez): stop this leak. |
- m_IndirectObjs[m_LastObjNum].reset(pObj.release()); // Changes deleters. |
- return m_IndirectObjs[m_LastObjNum].get(); |
-} |
- |
-CPDF_Array* CPDF_IndirectObjectHolder::AddIndirectArray() { |
- return ToArray(AddIndirectObject(UniqueObject(new CPDF_Array()))); |
-} |
- |
-CPDF_Dictionary* CPDF_IndirectObjectHolder::AddIndirectDictionary() { |
- return ToDictionary(AddIndirectObject(UniqueObject(new CPDF_Dictionary()))); |
-} |
- |
-CPDF_Dictionary* CPDF_IndirectObjectHolder::AddIndirectDictionary( |
- const CFX_WeakPtr<CFX_ByteStringPool>& pPool) { |
- return ToDictionary( |
- AddIndirectObject(UniqueObject(new CPDF_Dictionary(pPool)))); |
-} |
- |
-CPDF_Stream* CPDF_IndirectObjectHolder::AddIndirectStream() { |
- return ToStream(AddIndirectObject(UniqueObject(new CPDF_Stream()))); |
-} |
- |
-CPDF_Stream* CPDF_IndirectObjectHolder::AddIndirectStream( |
- uint8_t* pData, |
- uint32_t size, |
- CPDF_Dictionary* pDict) { |
- return ToStream( |
- AddIndirectObject(UniqueObject(new CPDF_Stream(pData, size, pDict)))); |
+ m_IndirectObjs[m_LastObjNum].reset(pObj); |
+ pObj->m_ObjNum = m_LastObjNum; |
+ return m_LastObjNum; |
} |
bool CPDF_IndirectObjectHolder::ReplaceIndirectObjectIfHigherGeneration( |
uint32_t objnum, |
- UniqueObject pObj) { |
+ CPDF_Object* pObj) { |
if (!objnum || !pObj) |
return false; |
CPDF_Object* pOldObj = GetIndirectObject(objnum); |
- if (pOldObj && pObj->GetGenNum() <= pOldObj->GetGenNum()) |
+ if (pOldObj && pObj->GetGenNum() <= pOldObj->GetGenNum()) { |
+ delete pObj; |
return false; |
- |
+ } |
pObj->m_ObjNum = objnum; |
- m_IndirectObjs[objnum].reset(pObj.release()); // Changes deleters. |
+ m_IndirectObjs[objnum].reset(pObj); |
m_LastObjNum = std::max(m_LastObjNum, objnum); |
return true; |
} |
-void CPDF_IndirectObjectHolder::DeleteIndirectObject(uint32_t objnum) { |
+void CPDF_IndirectObjectHolder::ReleaseIndirectObject(uint32_t objnum) { |
CPDF_Object* pObj = GetIndirectObject(objnum); |
if (!pObj || pObj->GetObjNum() == CPDF_Object::kInvalidObjNum) |
return; |