diff options
author | dsinclair <dsinclair@chromium.org> | 2016-08-23 20:14:27 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-23 20:14:27 -0700 |
commit | e07edce5b253bc4f2bef6888c5b1cbf0b320a919 (patch) | |
tree | 85b2d31b4f3630753553efb9399a429ab0e7271c /core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp | |
parent | 03bd7c78ff0411f0db033b5e6b5bf00c7fe2fb87 (diff) | |
download | pdfium-e07edce5b253bc4f2bef6888c5b1cbf0b320a919.tar.xz |
Make indirect object holder private.
This CL moves the m_IndirectObjs map to be private to the IndirectObjectHolder.
Various bits of code have been updated to use the accessors to the map.
This CL fixes the issue with the last time this landed by removing the objnum
check from GetIndirectObject() which appears to have caused the crashes.
Review-Url: https://codereview.chromium.org/2275703002
Diffstat (limited to 'core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp')
-rw-r--r-- | core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp b/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp index bb29da5052..d00b4a7961 100644 --- a/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp +++ b/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp @@ -20,20 +20,25 @@ CPDF_IndirectObjectHolder::~CPDF_IndirectObjectHolder() { pair.second->Destroy(); } +CPDF_Object* CPDF_IndirectObjectHolder::GetIndirectObject( + uint32_t objnum) const { + auto it = m_IndirectObjs.find(objnum); + return it != m_IndirectObjs.end() ? it->second : nullptr; +} + CPDF_Object* CPDF_IndirectObjectHolder::GetOrParseIndirectObject( uint32_t objnum) { if (objnum == 0) return nullptr; - auto it = m_IndirectObjs.find(objnum); - if (it != m_IndirectObjs.end()) - return it->second->GetObjNum() != CPDF_Object::kInvalidObjNum ? it->second - : nullptr; + CPDF_Object* pObj = GetIndirectObject(objnum); + if (pObj) + return pObj->GetObjNum() != CPDF_Object::kInvalidObjNum ? pObj : nullptr; if (!m_pParser) return nullptr; - CPDF_Object* pObj = m_pParser->ParseIndirectObject(this, objnum); + pObj = m_pParser->ParseIndirectObject(this, objnum); if (!pObj) return nullptr; @@ -62,13 +67,13 @@ bool CPDF_IndirectObjectHolder::ReplaceIndirectObjectIfHigherGeneration( if (!objnum || !pObj) return false; - auto it = m_IndirectObjs.find(objnum); - if (it != m_IndirectObjs.end()) { - if (pObj->GetGenNum() <= it->second->GetGenNum()) { + CPDF_Object* pOldObj = GetIndirectObject(objnum); + if (pOldObj) { + if (pObj->GetGenNum() <= pOldObj->GetGenNum()) { pObj->Destroy(); return false; } - it->second->Destroy(); + pOldObj->Destroy(); } pObj->m_ObjNum = objnum; m_IndirectObjs[objnum] = pObj; @@ -77,11 +82,10 @@ bool CPDF_IndirectObjectHolder::ReplaceIndirectObjectIfHigherGeneration( } void CPDF_IndirectObjectHolder::ReleaseIndirectObject(uint32_t objnum) { - auto it = m_IndirectObjs.find(objnum); - if (it == m_IndirectObjs.end() || - it->second->GetObjNum() == CPDF_Object::kInvalidObjNum) { + CPDF_Object* pObj = GetIndirectObject(objnum); + if (!pObj || pObj->GetObjNum() == CPDF_Object::kInvalidObjNum) return; - } - it->second->Destroy(); - m_IndirectObjs.erase(it); + + pObj->Destroy(); + m_IndirectObjs.erase(objnum); } |