Types used with SharedCopyOnWrite<> need private constructors.
Ensure these are only constructed with MakeRetain<>.
Change-Id: Icdc47d1670d46ad02c9ab07f99f787f9f8735d04
Reviewed-on: https://pdfium-review.googlesource.com/c/49210
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_clippath.h b/core/fpdfapi/page/cpdf_clippath.h
index c0b5ce5..f8d09da 100644
--- a/core/fpdfapi/page/cpdf_clippath.h
+++ b/core/fpdfapi/page/cpdf_clippath.h
@@ -46,14 +46,18 @@
private:
class PathData final : public Retainable {
public:
- using PathAndTypeData = std::pair<CPDF_Path, uint8_t>;
+ template <typename T, typename... Args>
+ friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
- PathData();
- PathData(const PathData& that);
- ~PathData() override;
+ using PathAndTypeData = std::pair<CPDF_Path, uint8_t>;
std::vector<PathAndTypeData> m_PathAndTypeList;
std::vector<std::unique_ptr<CPDF_TextObject>> m_TextList;
+
+ private:
+ PathData();
+ PathData(const PathData& that);
+ ~PathData() override;
};
SharedCopyOnWrite<PathData> m_Ref;
diff --git a/core/fpdfapi/page/cpdf_colorstate.h b/core/fpdfapi/page/cpdf_colorstate.h
index cc8d91d..27f5eea 100644
--- a/core/fpdfapi/page/cpdf_colorstate.h
+++ b/core/fpdfapi/page/cpdf_colorstate.h
@@ -52,9 +52,8 @@
private:
class ColorData final : public Retainable {
public:
- ColorData();
- ColorData(const ColorData& src);
- ~ColorData() override;
+ template <typename T, typename... Args>
+ friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
void SetDefault();
@@ -62,6 +61,11 @@
FX_COLORREF m_StrokeColorRef = 0;
CPDF_Color m_FillColor;
CPDF_Color m_StrokeColor;
+
+ private:
+ ColorData();
+ ColorData(const ColorData& src);
+ ~ColorData() override;
};
void SetColor(CPDF_ColorSpace* pCS,
diff --git a/core/fpdfapi/page/cpdf_generalstate.h b/core/fpdfapi/page/cpdf_generalstate.h
index 4df3d0e..7eff896 100644
--- a/core/fpdfapi/page/cpdf_generalstate.h
+++ b/core/fpdfapi/page/cpdf_generalstate.h
@@ -80,9 +80,8 @@
private:
class StateData final : public Retainable {
public:
- StateData();
- StateData(const StateData& that);
- ~StateData() override;
+ template <typename T, typename... Args>
+ friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
ByteString m_BlendMode = pdfium::transparency::kNormal;
BlendMode m_BlendType = BlendMode::kNormal;
@@ -105,6 +104,11 @@
UnownedPtr<const CPDF_Object> m_pHT;
float m_Flatness = 1.0f;
float m_Smoothness = 0.0f;
+
+ private:
+ StateData();
+ StateData(const StateData& that);
+ ~StateData() override;
};
SharedCopyOnWrite<StateData> m_Ref;
diff --git a/core/fpdfapi/page/cpdf_textstate.h b/core/fpdfapi/page/cpdf_textstate.h
index c1c3ba8..0c914a6 100644
--- a/core/fpdfapi/page/cpdf_textstate.h
+++ b/core/fpdfapi/page/cpdf_textstate.h
@@ -61,9 +61,8 @@
private:
class TextData final : public Retainable {
public:
- TextData();
- TextData(const TextData& src);
- ~TextData() override;
+ template <typename T, typename... Args>
+ friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
void SetFont(CPDF_Font* pFont);
float GetFontSizeV() const;
@@ -81,6 +80,10 @@
float m_CTM[4];
private:
+ TextData();
+ TextData(const TextData& src);
+ ~TextData() override;
+
void ReleaseFont();
};