| Index: 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 07b1a208d733e9dc386b75bf0cfc233ceed73629..46875d88a52dbd72462f8aee5c7309de5710586a 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<CPDF_Object*>(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);
 | 
| 
 |