Mark modified content streams as dirty in CPDF_PageObjectHolder.
Bug: pdfium:1051
Change-Id: Ib3376eea32336437d148f8f9c0017d6b8f9fb556
Reviewed-on: https://pdfium-review.googlesource.com/33770
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_pageobjectholder.cpp b/core/fpdfapi/page/cpdf_pageobjectholder.cpp
index cca7565..3eb88ec 100644
--- a/core/fpdfapi/page/cpdf_pageobjectholder.cpp
+++ b/core/fpdfapi/page/cpdf_pageobjectholder.cpp
@@ -119,6 +119,11 @@
it->release();
m_PageObjectList.erase(it);
+
+ int32_t content_stream = pPageObj->GetContentStream();
+ if (content_stream >= 0)
+ m_DirtyStreams.insert(content_stream);
+
return true;
}
diff --git a/core/fpdfapi/page/cpdf_pageobjectholder.h b/core/fpdfapi/page/cpdf_pageobjectholder.h
index 1c42791..d18f400 100644
--- a/core/fpdfapi/page/cpdf_pageobjectholder.h
+++ b/core/fpdfapi/page/cpdf_pageobjectholder.h
@@ -9,6 +9,7 @@
#include <map>
#include <memory>
+#include <set>
#include <vector>
#include "core/fpdfapi/page/cpdf_pageobjectlist.h"
@@ -84,6 +85,8 @@
void AddImageMaskBoundingBox(const CFX_FloatRect& box);
void Transform(const CFX_Matrix& matrix);
CFX_FloatRect CalcBoundingBox() const;
+ const std::set<int32_t>* GetDirtyStreams() const { return &m_DirtyStreams; }
+ void ClearDirtyStreams() { m_DirtyStreams.clear(); }
UnownedPtr<CPDF_Dictionary> m_pPageResources;
UnownedPtr<CPDF_Dictionary> m_pResources;
@@ -105,6 +108,9 @@
std::unique_ptr<CPDF_ContentParser> m_pParser;
CPDF_PageObjectList m_PageObjectList;
CFX_Matrix m_LastCTM;
+
+ // The indexes of Content streams that are dirty and need to be regenerated.
+ std::set<int32_t> m_DirtyStreams;
};
#endif // CORE_FPDFAPI_PAGE_CPDF_PAGEOBJECTHOLDER_H_