summaryrefslogtreecommitdiff
path: root/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp
diff options
context:
space:
mode:
authortsepez <tsepez@chromium.org>2016-09-19 14:05:05 -0700
committerCommit bot <commit-bot@chromium.org>2016-09-19 14:05:05 -0700
commitc8544d634a1993e2592e41458be215fcd0956031 (patch)
treee71b04e3ceea55454d8b8f48d1750117f347f958 /core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp
parentc6c2e36f59f54b17d9e2c54a2003166e79ccb5e6 (diff)
downloadpdfium-c8544d634a1993e2592e41458be215fcd0956031.tar.xz
Make CPDF_IndirectObjectHolder use unique_ptr to objects
The objects it is given are owned by it and are simply deleted without regard to Release() used by others. Review-Url: https://codereview.chromium.org/2350263002
Diffstat (limited to 'core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp')
-rw-r--r--core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp26
1 files changed, 8 insertions, 18 deletions
diff --git a/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp b/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp
index dc639feb1a..800e34b3d1 100644
--- a/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp
+++ b/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp
@@ -11,15 +11,12 @@
CPDF_IndirectObjectHolder::CPDF_IndirectObjectHolder() : m_LastObjNum(0) {}
-CPDF_IndirectObjectHolder::~CPDF_IndirectObjectHolder() {
- for (const auto& pair : m_IndirectObjs)
- delete pair.second;
-}
+CPDF_IndirectObjectHolder::~CPDF_IndirectObjectHolder() {}
CPDF_Object* CPDF_IndirectObjectHolder::GetIndirectObject(
uint32_t objnum) const {
auto it = m_IndirectObjs.find(objnum);
- return it != m_IndirectObjs.end() ? it->second : nullptr;
+ return it != m_IndirectObjs.end() ? it->second.get() : nullptr;
}
CPDF_Object* CPDF_IndirectObjectHolder::GetOrParseIndirectObject(
@@ -37,10 +34,7 @@ CPDF_Object* CPDF_IndirectObjectHolder::GetOrParseIndirectObject(
pObj->m_ObjNum = objnum;
m_LastObjNum = std::max(m_LastObjNum, objnum);
- if (m_IndirectObjs[objnum])
- delete m_IndirectObjs[objnum];
-
- m_IndirectObjs[objnum] = pObj;
+ m_IndirectObjs[objnum].reset(pObj);
return pObj;
}
@@ -53,7 +47,7 @@ uint32_t CPDF_IndirectObjectHolder::AddIndirectObject(CPDF_Object* pObj) {
return pObj->m_ObjNum;
m_LastObjNum++;
- m_IndirectObjs[m_LastObjNum] = pObj;
+ m_IndirectObjs[m_LastObjNum].reset(pObj);
pObj->m_ObjNum = m_LastObjNum;
return m_LastObjNum;
}
@@ -65,15 +59,12 @@ bool CPDF_IndirectObjectHolder::ReplaceIndirectObjectIfHigherGeneration(
return false;
CPDF_Object* pOldObj = GetIndirectObject(objnum);
- if (pOldObj) {
- if (pObj->GetGenNum() <= pOldObj->GetGenNum()) {
- delete pObj;
- return false;
- }
- delete pOldObj;
+ if (pOldObj && pObj->GetGenNum() <= pOldObj->GetGenNum()) {
+ delete pObj;
+ return false;
}
pObj->m_ObjNum = objnum;
- m_IndirectObjs[objnum] = pObj;
+ m_IndirectObjs[objnum].reset(pObj);
m_LastObjNum = std::max(m_LastObjNum, objnum);
return true;
}
@@ -83,6 +74,5 @@ void CPDF_IndirectObjectHolder::ReleaseIndirectObject(uint32_t objnum) {
if (!pObj || pObj->GetObjNum() == CPDF_Object::kInvalidObjNum)
return;
- delete pObj;
m_IndirectObjs.erase(objnum);
}