Index: core/fpdfapi/render/fpdf_render.cpp |
diff --git a/core/fpdfapi/render/fpdf_render.cpp b/core/fpdfapi/render/fpdf_render.cpp |
index a431aa94864a9cc13d9dd40fc703e2d44ad6fb59..e4abb7e8329c1da3257731c8147864356f433d13 100644 |
--- a/core/fpdfapi/render/fpdf_render.cpp |
+++ b/core/fpdfapi/render/fpdf_render.cpp |
@@ -80,8 +80,14 @@ CPDF_Type3Cache* CPDF_DocRenderData::GetCachedType3(CPDF_Type3Font* pFont) { |
void CPDF_DocRenderData::ReleaseCachedType3(CPDF_Type3Font* pFont) { |
auto it = m_Type3FaceMap.find(pFont); |
- if (it != m_Type3FaceMap.end()) |
+ if (it != m_Type3FaceMap.end()) { |
it->second->RemoveRef(); |
+ if (it->second->use_count() < 2) { |
+ delete it->second->get(); |
+ delete it->second; |
+ m_Type3FaceMap.erase(it); |
+ } |
+ } |
} |
CPDF_RenderOptions::CPDF_RenderOptions() |
@@ -1150,8 +1156,14 @@ CPDF_TransferFunc* CPDF_DocRenderData::GetTransferFunc(CPDF_Object* pObj) { |
void CPDF_DocRenderData::ReleaseTransferFunc(CPDF_Object* pObj) { |
auto it = m_TransferFuncMap.find(pObj); |
- if (it != m_TransferFuncMap.end()) |
+ if (it != m_TransferFuncMap.end()) { |
it->second->RemoveRef(); |
+ if (it->second->use_count() < 2) { |
+ delete it->second->get(); |
+ delete it->second; |
+ m_TransferFuncMap.erase(it); |
+ } |
+ } |
} |
CPDF_DeviceBuffer::CPDF_DeviceBuffer() |