When forcing clear page data, no need to release colorspace when releasing pattern
authorBo Xu <bo_xu@foxitsoftware.com>
Tue, 16 Sep 2014 20:24:37 +0000 (13:24 -0700)
committerBo Xu <bo_xu@foxitsoftware.com>
Tue, 16 Sep 2014 20:24:37 +0000 (13:24 -0700)
BUG=414661
R=tsepez@chromium.org

Review URL: https://codereview.chromium.org/572853006

core/include/fpdfapi/fpdf_resource.h
core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
core/src/fpdfapi/fpdf_page/fpdf_page_pattern.cpp

index a7a6444..937024c 100644 (file)
@@ -730,6 +730,7 @@ class CPDF_Pattern : public CFX_Object
 public:
    
     virtual ~CPDF_Pattern();
+    void    SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; }
 
     CPDF_Object*                m_pPatternObj;
 
@@ -741,8 +742,8 @@ public:
     CPDF_Document*              m_pDocument;
 
 protected:
-    
     CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix);
+    FX_BOOL     m_bForceClear;
 };
 
 class CPDF_TilingPattern : public CPDF_Pattern
index 131edbe..77db453 100644 (file)
@@ -229,6 +229,7 @@ void CPDF_DocPageData::Clear(FX_BOOL bForceRelease)
         m_PatternMap.GetNextAssoc(pos, ptObj, ptData);
         nCount = ptData->m_nCount;
         if (bForceRelease || nCount < 2) {
+            ptData->m_Obj->SetForceClear(bForceRelease);
             delete ptData->m_Obj;
             ptData->m_Obj = NULL;
         }
index bcb8196..67ea4fe 100644 (file)
@@ -8,7 +8,7 @@
 #include "pageint.h"
 
 CPDF_Pattern::CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix) :
-    m_pPatternObj(NULL), m_PatternType(PATTERN_TILING), m_pDocument(NULL)
+    m_pPatternObj(NULL), m_PatternType(PATTERN_TILING), m_pDocument(NULL), m_bForceClear(FALSE)
 {
     if (pParentMatrix) {
         m_ParentMatrix = *pParentMatrix;
@@ -97,7 +97,7 @@ void CPDF_ShadingPattern::Clear()
         m_pFunctions[i] = NULL;
     }
     CPDF_ColorSpace* pCS = m_pCS;
-    if (pCS && m_pDocument) {
+    if (!m_bForceClear && pCS && m_pDocument) {
         m_pDocument->GetPageData()->ReleaseColorSpace(pCS->GetArray());
     }
     m_ShadingType = 0;