From f7992b39cec908e549fb995acae477a9efba538b Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Mon, 26 Oct 2015 15:36:17 -0700 Subject: Remove default argument from CPDF_Dictionary::SetAt(). Also fix a potential object leak. R=tsepez@chromium.org Review URL: https://codereview.chromium.org/1414963005 . --- .../fpdfapi/fpdf_parser/fpdf_parser_objects.cpp | 31 ++++++++++------------ 1 file changed, 14 insertions(+), 17 deletions(-) (limited to 'core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp') diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp index 07b1a208d7..46875d88a5 100644 --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp @@ -717,27 +717,24 @@ FX_BOOL CPDF_Dictionary::KeyExist(const CFX_ByteStringC& key) const { void* value; return m_Map.Lookup(key, value); } -void CPDF_Dictionary::SetAt(const CFX_ByteStringC& key, - CPDF_Object* pObj, - CPDF_IndirectObjects* pObjs) { - ASSERT(m_Type == PDFOBJ_DICTIONARY); - CPDF_Object* p = NULL; - m_Map.Lookup(key, (void*&)p); - if (p == pObj) { + +void CPDF_Dictionary::SetAt(const CFX_ByteStringC& key, CPDF_Object* pObj) { + ASSERT(IsDictionary()); + void* pValue = nullptr; + m_Map.Lookup(key, pValue); + CPDF_Object* pExisting = static_cast(pValue); + if (pExisting == pObj) return; - } - if (p) - p->Release(); - if (pObj) { - if (pObj->GetObjNum()) { - ASSERT(pObjs != NULL); - pObj = new CPDF_Reference(pObjs, pObj->GetObjNum()); - } + + if (pExisting) + pExisting->Release(); + + if (pObj) m_Map.SetAt(key, pObj); - } else { + else m_Map.RemoveKey(key); - } } + void CPDF_Dictionary::AddValue(const CFX_ByteStringC& key, CPDF_Object* pObj) { ASSERT(m_Type == PDFOBJ_DICTIONARY); m_Map.AddValue(key, pObj); -- cgit v1.2.3