| Index: core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp
|
| diff --git a/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp b/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp
|
| index 800e34b3d1eb62f3a1de4c4fc27c6a5727bc702a..dc639feb1a4b28915b5916d23e4fb68523e82c50 100644
|
| --- a/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp
|
| +++ b/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp
|
| @@ -11,12 +11,15 @@
|
|
|
| CPDF_IndirectObjectHolder::CPDF_IndirectObjectHolder() : m_LastObjNum(0) {}
|
|
|
| -CPDF_IndirectObjectHolder::~CPDF_IndirectObjectHolder() {}
|
| +CPDF_IndirectObjectHolder::~CPDF_IndirectObjectHolder() {
|
| + for (const auto& pair : m_IndirectObjs)
|
| + delete pair.second;
|
| +}
|
|
|
| CPDF_Object* CPDF_IndirectObjectHolder::GetIndirectObject(
|
| uint32_t objnum) const {
|
| auto it = m_IndirectObjs.find(objnum);
|
| - return it != m_IndirectObjs.end() ? it->second.get() : nullptr;
|
| + return it != m_IndirectObjs.end() ? it->second : nullptr;
|
| }
|
|
|
| CPDF_Object* CPDF_IndirectObjectHolder::GetOrParseIndirectObject(
|
| @@ -34,7 +37,10 @@ CPDF_Object* CPDF_IndirectObjectHolder::GetOrParseIndirectObject(
|
|
|
| pObj->m_ObjNum = objnum;
|
| m_LastObjNum = std::max(m_LastObjNum, objnum);
|
| - m_IndirectObjs[objnum].reset(pObj);
|
| + if (m_IndirectObjs[objnum])
|
| + delete m_IndirectObjs[objnum];
|
| +
|
| + m_IndirectObjs[objnum] = pObj;
|
| return pObj;
|
| }
|
|
|
| @@ -47,7 +53,7 @@ uint32_t CPDF_IndirectObjectHolder::AddIndirectObject(CPDF_Object* pObj) {
|
| return pObj->m_ObjNum;
|
|
|
| m_LastObjNum++;
|
| - m_IndirectObjs[m_LastObjNum].reset(pObj);
|
| + m_IndirectObjs[m_LastObjNum] = pObj;
|
| pObj->m_ObjNum = m_LastObjNum;
|
| return m_LastObjNum;
|
| }
|
| @@ -59,12 +65,15 @@ bool CPDF_IndirectObjectHolder::ReplaceIndirectObjectIfHigherGeneration(
|
| return false;
|
|
|
| CPDF_Object* pOldObj = GetIndirectObject(objnum);
|
| - if (pOldObj && pObj->GetGenNum() <= pOldObj->GetGenNum()) {
|
| - delete pObj;
|
| - return false;
|
| + if (pOldObj) {
|
| + if (pObj->GetGenNum() <= pOldObj->GetGenNum()) {
|
| + delete pObj;
|
| + return false;
|
| + }
|
| + delete pOldObj;
|
| }
|
| pObj->m_ObjNum = objnum;
|
| - m_IndirectObjs[objnum].reset(pObj);
|
| + m_IndirectObjs[objnum] = pObj;
|
| m_LastObjNum = std::max(m_LastObjNum, objnum);
|
| return true;
|
| }
|
| @@ -74,5 +83,6 @@ void CPDF_IndirectObjectHolder::ReleaseIndirectObject(uint32_t objnum) {
|
| if (!pObj || pObj->GetObjNum() == CPDF_Object::kInvalidObjNum)
|
| return;
|
|
|
| + delete pObj;
|
| m_IndirectObjs.erase(objnum);
|
| }
|
|
|