| Index: core/fpdfapi/fpdf_page/fpdf_page_doc.cpp | 
| diff --git a/core/fpdfapi/fpdf_page/fpdf_page_doc.cpp b/core/fpdfapi/fpdf_page/fpdf_page_doc.cpp | 
| index 9e586e326f535c897dbb99960e39d2951486bf40..e050060a9e4befcb46a0ec38ff33a5a35241334e 100644 | 
| --- a/core/fpdfapi/fpdf_page/fpdf_page_doc.cpp | 
| +++ b/core/fpdfapi/fpdf_page/fpdf_page_doc.cpp | 
| @@ -214,9 +214,10 @@ void CPDF_DocPageData::ReleaseFont(const CPDF_Dictionary* pFontDict) { | 
| return; | 
|  | 
| pFontData->RemoveRef(); | 
| -  if (pFontData->use_count() != 0) | 
| +  if (pFontData->use_count() > 1) | 
| return; | 
|  | 
| +  // We have font data only in m_FontMap cache. Clean it. | 
| pFontData->clear(); | 
| } | 
|  | 
| @@ -330,9 +331,10 @@ void CPDF_DocPageData::ReleaseColorSpace(const CPDF_Object* pColorSpace) { | 
| return; | 
|  | 
| pCountedColorSpace->RemoveRef(); | 
| -  if (pCountedColorSpace->use_count() != 0) | 
| +  if (pCountedColorSpace->use_count() > 1) | 
| return; | 
|  | 
| +  // We have item only in m_ColorSpaceMap cache. Clean it. | 
| pCountedColorSpace->get()->ReleaseCS(); | 
| pCountedColorSpace->reset(nullptr); | 
| } | 
| @@ -391,9 +393,10 @@ void CPDF_DocPageData::ReleasePattern(const CPDF_Object* pPatternObj) { | 
| return; | 
|  | 
| pPattern->RemoveRef(); | 
| -  if (pPattern->use_count() != 0) | 
| +  if (pPattern->use_count() > 1) | 
| return; | 
|  | 
| +  // We have item only in m_PatternMap cache. Clean it. | 
| pPattern->clear(); | 
| } | 
|  | 
| @@ -429,9 +432,10 @@ void CPDF_DocPageData::ReleaseImage(const CPDF_Object* pImageStream) { | 
| return; | 
|  | 
| pCountedImage->RemoveRef(); | 
| -  if (pCountedImage->use_count() != 0) | 
| +  if (pCountedImage->use_count() > 1) | 
| return; | 
|  | 
| +  // We have item only in m_ImageMap cache. Clean it. | 
| delete pCountedImage->get(); | 
| delete pCountedImage; | 
| m_ImageMap.erase(it); | 
| @@ -454,7 +458,8 @@ CPDF_IccProfile* CPDF_DocPageData::GetIccProfile( | 
| auto hash_it = m_HashProfileMap.find(bsDigest); | 
| if (hash_it != m_HashProfileMap.end()) { | 
| auto it_copied_stream = m_IccProfileMap.find(hash_it->second); | 
| -    return it_copied_stream->second->AddRef(); | 
| +    if (it_copied_stream != m_IccProfileMap.end()) | 
| +      return it_copied_stream->second->AddRef(); | 
| } | 
| CPDF_IccProfile* pProfile = | 
| new CPDF_IccProfile(stream.GetData(), stream.GetSize()); | 
| @@ -473,12 +478,13 @@ void CPDF_DocPageData::ReleaseIccProfile(const CPDF_IccProfile* pIccProfile) { | 
| continue; | 
|  | 
| profile->RemoveRef(); | 
| -    if (profile->use_count() == 0) { | 
| -      delete profile->get(); | 
| -      delete profile; | 
| -      m_IccProfileMap.erase(it); | 
| -      return; | 
| -    } | 
| +    if (profile->use_count() > 1) | 
| +      continue; | 
| +    // We have item only in m_IccProfileMap cache. Clean it. | 
| +    delete profile->get(); | 
| +    delete profile; | 
| +    m_IccProfileMap.erase(it); | 
| +    return; | 
| } | 
| } | 
|  | 
| @@ -518,9 +524,10 @@ void CPDF_DocPageData::ReleaseFontFileStreamAcc( | 
| return; | 
|  | 
| pCountedStream->RemoveRef(); | 
| -  if (pCountedStream->use_count() != 0) | 
| +  if (pCountedStream->use_count() > 1) | 
| return; | 
|  | 
| +  // We have item only in m_FontFileMap cache. Clean it. | 
| delete pCountedStream->get(); | 
| delete pCountedStream; | 
| m_FontFileMap.erase(it); | 
|  |