| Index: core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
|
| diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
|
| index 097bd61e6c5b1cf6827f9abc5cfd060cf9912380..0b52800939c27f73338ce00b855a1870ce361011 100644
|
| --- a/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
|
| +++ b/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
|
| @@ -134,6 +134,7 @@ CPDF_DocPageData::CPDF_DocPageData(CPDF_Document *pPDFDoc)
|
| , m_ImageMap()
|
| , m_IccProfileMap()
|
| , m_FontFileMap()
|
| + , m_bForceClear(FALSE)
|
| {
|
| m_FontMap.InitHashTable(64);
|
| m_ColorSpaceMap.InitHashTable(32);
|
| @@ -147,99 +148,89 @@ CPDF_DocPageData::~CPDF_DocPageData()
|
| Clear(FALSE);
|
| Clear(TRUE);
|
| }
|
| -void CPDF_DocPageData::Clear(FX_BOOL bRelease)
|
| +void CPDF_DocPageData::Clear(FX_BOOL bForceRelease)
|
| {
|
| FX_POSITION pos;
|
| FX_DWORD nCount;
|
| - {
|
| - pos = m_PatternMap.GetStartPosition();
|
| - while (pos) {
|
| - CPDF_Object* ptObj;
|
| - CPDF_CountedObject<CPDF_Pattern*>* ptData;
|
| - m_PatternMap.GetNextAssoc(pos, ptObj, ptData);
|
| - nCount = ptData->m_nCount;
|
| - if (bRelease || nCount < 2) {
|
| - delete ptData->m_Obj;
|
| - ptData->m_Obj = NULL;
|
| - }
|
| +
|
| + m_bForceClear = bForceRelease;
|
| + pos = m_PatternMap.GetStartPosition();
|
| + while (pos) {
|
| + CPDF_Object* ptObj;
|
| + CPDF_CountedObject<CPDF_Pattern*>* ptData;
|
| + m_PatternMap.GetNextAssoc(pos, ptObj, ptData);
|
| + nCount = ptData->m_nCount;
|
| + if (bForceRelease || nCount < 2) {
|
| + delete ptData->m_Obj;
|
| + ptData->m_Obj = NULL;
|
| }
|
| }
|
| - {
|
| - pos = m_FontMap.GetStartPosition();
|
| - while (pos) {
|
| - CPDF_Dictionary* fontDict;
|
| - CPDF_CountedObject<CPDF_Font*>* fontData;
|
| - m_FontMap.GetNextAssoc(pos, fontDict, fontData);
|
| - nCount = fontData->m_nCount;
|
| - if (bRelease || nCount < 2) {
|
| - delete fontData->m_Obj;
|
| - fontData->m_Obj = NULL;
|
| - }
|
| + pos = m_FontMap.GetStartPosition();
|
| + while (pos) {
|
| + CPDF_Dictionary* fontDict;
|
| + CPDF_CountedObject<CPDF_Font*>* fontData;
|
| + m_FontMap.GetNextAssoc(pos, fontDict, fontData);
|
| + nCount = fontData->m_nCount;
|
| + if (bForceRelease || nCount < 2) {
|
| + delete fontData->m_Obj;
|
| + fontData->m_Obj = NULL;
|
| }
|
| }
|
| - {
|
| - pos = m_ImageMap.GetStartPosition();
|
| - while (pos) {
|
| - FX_DWORD objNum;
|
| - CPDF_CountedObject<CPDF_Image*>* imageData;
|
| - m_ImageMap.GetNextAssoc(pos, objNum, imageData);
|
| - nCount = imageData->m_nCount;
|
| - if (bRelease || nCount < 2) {
|
| - delete imageData->m_Obj;
|
| - delete imageData;
|
| - m_ImageMap.RemoveKey(objNum);
|
| - }
|
| + pos = m_ImageMap.GetStartPosition();
|
| + while (pos) {
|
| + FX_DWORD objNum;
|
| + CPDF_CountedObject<CPDF_Image*>* imageData;
|
| + m_ImageMap.GetNextAssoc(pos, objNum, imageData);
|
| + nCount = imageData->m_nCount;
|
| + if (bForceRelease || nCount < 2) {
|
| + delete imageData->m_Obj;
|
| + delete imageData;
|
| + m_ImageMap.RemoveKey(objNum);
|
| }
|
| }
|
| - {
|
| - pos = m_ColorSpaceMap.GetStartPosition();
|
| - while (pos) {
|
| - CPDF_Object* csKey;
|
| - CPDF_CountedObject<CPDF_ColorSpace*>* csData;
|
| - m_ColorSpaceMap.GetNextAssoc(pos, csKey, csData);
|
| - nCount = csData->m_nCount;
|
| - if (bRelease || nCount < 2) {
|
| - csData->m_Obj->ReleaseCS();
|
| - csData->m_Obj = NULL;
|
| - }
|
| + pos = m_ColorSpaceMap.GetStartPosition();
|
| + while (pos) {
|
| + CPDF_Object* csKey;
|
| + CPDF_CountedObject<CPDF_ColorSpace*>* csData;
|
| + m_ColorSpaceMap.GetNextAssoc(pos, csKey, csData);
|
| + nCount = csData->m_nCount;
|
| + if (bForceRelease || nCount < 2) {
|
| + csData->m_Obj->ReleaseCS();
|
| + csData->m_Obj = NULL;
|
| }
|
| }
|
| - {
|
| - pos = m_IccProfileMap.GetStartPosition();
|
| - while (pos) {
|
| - CPDF_Stream* ipKey;
|
| - CPDF_CountedObject<CPDF_IccProfile*>* ipData;
|
| - m_IccProfileMap.GetNextAssoc(pos, ipKey, ipData);
|
| - nCount = ipData->m_nCount;
|
| - if (bRelease || nCount < 2) {
|
| - FX_POSITION pos2 = m_HashProfileMap.GetStartPosition();
|
| - while (pos2) {
|
| - CFX_ByteString bsKey;
|
| - CPDF_Stream* pFindStream = NULL;
|
| - m_HashProfileMap.GetNextAssoc(pos2, bsKey, (void*&)pFindStream);
|
| - if (ipKey == pFindStream) {
|
| - m_HashProfileMap.RemoveKey(bsKey);
|
| - break;
|
| - }
|
| + pos = m_IccProfileMap.GetStartPosition();
|
| + while (pos) {
|
| + CPDF_Stream* ipKey;
|
| + CPDF_CountedObject<CPDF_IccProfile*>* ipData;
|
| + m_IccProfileMap.GetNextAssoc(pos, ipKey, ipData);
|
| + nCount = ipData->m_nCount;
|
| + if (bForceRelease || nCount < 2) {
|
| + FX_POSITION pos2 = m_HashProfileMap.GetStartPosition();
|
| + while (pos2) {
|
| + CFX_ByteString bsKey;
|
| + CPDF_Stream* pFindStream = NULL;
|
| + m_HashProfileMap.GetNextAssoc(pos2, bsKey, (void*&)pFindStream);
|
| + if (ipKey == pFindStream) {
|
| + m_HashProfileMap.RemoveKey(bsKey);
|
| + break;
|
| }
|
| - delete ipData->m_Obj;
|
| - delete ipData;
|
| - m_IccProfileMap.RemoveKey(ipKey);
|
| }
|
| + delete ipData->m_Obj;
|
| + delete ipData;
|
| + m_IccProfileMap.RemoveKey(ipKey);
|
| }
|
| }
|
| - {
|
| - pos = m_FontFileMap.GetStartPosition();
|
| - while (pos) {
|
| - CPDF_Stream* ftKey;
|
| - CPDF_CountedObject<CPDF_StreamAcc*>* ftData;
|
| - m_FontFileMap.GetNextAssoc(pos, ftKey, ftData);
|
| - nCount = ftData->m_nCount;
|
| - if (bRelease || nCount < 2) {
|
| - delete ftData->m_Obj;
|
| - delete ftData;
|
| - m_FontFileMap.RemoveKey(ftKey);
|
| - }
|
| + pos = m_FontFileMap.GetStartPosition();
|
| + while (pos) {
|
| + CPDF_Stream* ftKey;
|
| + CPDF_CountedObject<CPDF_StreamAcc*>* ftData;
|
| + m_FontFileMap.GetNextAssoc(pos, ftKey, ftData);
|
| + nCount = ftData->m_nCount;
|
| + if (bForceRelease || nCount < 2) {
|
| + delete ftData->m_Obj;
|
| + delete ftData;
|
| + m_FontFileMap.RemoveKey(ftKey);
|
| }
|
| }
|
| }
|
|
|