| 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);
|
|
|