summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLei Zhang <thestig@chromium.org>2018-05-09 22:02:32 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-05-09 22:02:32 +0000
commit7e28208d26764438bef62e051d2e1fed13e1e0ec (patch)
tree781d3e250a4fd3af3eb16da299b56938b21a7414
parent52489ee8114cf476342231be610e75b324290920 (diff)
downloadpdfium-7e28208d26764438bef62e051d2e1fed13e1e0ec.tar.xz
Add proper const/non-const versions of CPDF_Object methods.
Instead of having const methods that return non-const pointers. BUG=pdfium:234 Change-Id: I598e9b4f267f702e2e71001cfe3aa3c9e9d8c12f Reviewed-on: https://pdfium-review.googlesource.com/32182 Commit-Queue: Lei Zhang <thestig@chromium.org> Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
-rw-r--r--core/fpdfapi/page/cpdf_colorspace.cpp2
-rw-r--r--core/fpdfapi/page/cpdf_stitchfunc.cpp2
-rw-r--r--core/fpdfapi/parser/cpdf_array.cpp4
-rw-r--r--core/fpdfapi/parser/cpdf_array.h4
-rw-r--r--core/fpdfapi/parser/cpdf_dictionary.cpp10
-rw-r--r--core/fpdfapi/parser/cpdf_dictionary.h3
-rw-r--r--core/fpdfapi/parser/cpdf_object.cpp14
-rw-r--r--core/fpdfapi/parser/cpdf_object.h6
-rw-r--r--core/fpdfapi/parser/cpdf_reference.cpp27
-rw-r--r--core/fpdfapi/parser/cpdf_reference.h9
-rw-r--r--core/fpdfapi/parser/cpdf_stream.cpp13
-rw-r--r--core/fpdfapi/parser/cpdf_stream.h4
-rw-r--r--core/fpdfapi/parser/cpdf_stream_acc.cpp2
-rw-r--r--core/fpdfapi/parser/cpdf_stream_acc.h2
-rw-r--r--fpdfsdk/cpdfsdk_helpers.cpp5
-rw-r--r--fpdfsdk/fpdf_ppo.cpp2
16 files changed, 73 insertions, 36 deletions
diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index aa664d4e0f..4f68329862 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -458,7 +458,7 @@ std::unique_ptr<CPDF_ColorSpace> CPDF_ColorSpace::Load(
return pdfium::WrapUnique(ColorspaceFromName(pObj->GetString()));
if (const CPDF_Stream* pStream = pObj->AsStream()) {
- CPDF_Dictionary* pDict = pStream->GetDict();
+ const CPDF_Dictionary* pDict = pStream->GetDict();
if (!pDict)
return nullptr;
diff --git a/core/fpdfapi/page/cpdf_stitchfunc.cpp b/core/fpdfapi/page/cpdf_stitchfunc.cpp
index 2083a91623..042e090062 100644
--- a/core/fpdfapi/page/cpdf_stitchfunc.cpp
+++ b/core/fpdfapi/page/cpdf_stitchfunc.cpp
@@ -27,7 +27,7 @@ bool CPDF_StitchFunc::v_Init(const CPDF_Object* pObj,
if (m_nInputs != kRequiredNumInputs)
return false;
- CPDF_Dictionary* pDict = pObj->GetDict();
+ const CPDF_Dictionary* pDict = pObj->GetDict();
if (!pDict)
return false;
diff --git a/core/fpdfapi/parser/cpdf_array.cpp b/core/fpdfapi/parser/cpdf_array.cpp
index 5a5cdc9be0..9293101b32 100644
--- a/core/fpdfapi/parser/cpdf_array.cpp
+++ b/core/fpdfapi/parser/cpdf_array.cpp
@@ -66,7 +66,7 @@ std::unique_ptr<CPDF_Object> CPDF_Array::CloneNonCyclic(
return std::move(pCopy);
}
-CFX_FloatRect CPDF_Array::GetRect() {
+CFX_FloatRect CPDF_Array::GetRect() const {
CFX_FloatRect rect;
if (!IsArray() || m_Objects.size() != 4)
return rect;
@@ -78,7 +78,7 @@ CFX_FloatRect CPDF_Array::GetRect() {
return rect;
}
-CFX_Matrix CPDF_Array::GetMatrix() {
+CFX_Matrix CPDF_Array::GetMatrix() const {
CFX_Matrix matrix;
if (!IsArray() || m_Objects.size() != 6)
return CFX_Matrix();
diff --git a/core/fpdfapi/parser/cpdf_array.h b/core/fpdfapi/parser/cpdf_array.h
index bf8cb426c4..442b85cc80 100644
--- a/core/fpdfapi/parser/cpdf_array.h
+++ b/core/fpdfapi/parser/cpdf_array.h
@@ -47,8 +47,8 @@ class CPDF_Array : public CPDF_Object {
CPDF_Stream* GetStreamAt(size_t index) const;
CPDF_Array* GetArrayAt(size_t index) const;
float GetFloatAt(size_t index) const { return GetNumberAt(index); }
- CFX_Matrix GetMatrix();
- CFX_FloatRect GetRect();
+ CFX_Matrix GetMatrix() const;
+ CFX_FloatRect GetRect() const;
// Takes ownership of |pObj|, returns unowned pointer to it.
CPDF_Object* Add(std::unique_ptr<CPDF_Object> pObj);
diff --git a/core/fpdfapi/parser/cpdf_dictionary.cpp b/core/fpdfapi/parser/cpdf_dictionary.cpp
index b3195b58af..29571d6c51 100644
--- a/core/fpdfapi/parser/cpdf_dictionary.cpp
+++ b/core/fpdfapi/parser/cpdf_dictionary.cpp
@@ -42,10 +42,12 @@ CPDF_Object::Type CPDF_Dictionary::GetType() const {
return DICTIONARY;
}
-CPDF_Dictionary* CPDF_Dictionary::GetDict() const {
- // The method should be made non-const if we want to not be const.
- // See bug #234.
- return const_cast<CPDF_Dictionary*>(this);
+CPDF_Dictionary* CPDF_Dictionary::GetDict() {
+ return this;
+}
+
+const CPDF_Dictionary* CPDF_Dictionary::GetDict() const {
+ return this;
}
bool CPDF_Dictionary::IsDictionary() const {
diff --git a/core/fpdfapi/parser/cpdf_dictionary.h b/core/fpdfapi/parser/cpdf_dictionary.h
index 688e88e510..8ecbe2d6fc 100644
--- a/core/fpdfapi/parser/cpdf_dictionary.h
+++ b/core/fpdfapi/parser/cpdf_dictionary.h
@@ -33,7 +33,8 @@ class CPDF_Dictionary : public CPDF_Object {
// CPDF_Object:
Type GetType() const override;
std::unique_ptr<CPDF_Object> Clone() const override;
- CPDF_Dictionary* GetDict() const override;
+ CPDF_Dictionary* GetDict() override;
+ const CPDF_Dictionary* GetDict() const override;
bool IsDictionary() const override;
CPDF_Dictionary* AsDictionary() override;
const CPDF_Dictionary* AsDictionary() const override;
diff --git a/core/fpdfapi/parser/cpdf_object.cpp b/core/fpdfapi/parser/cpdf_object.cpp
index 67632a040c..8190d3429f 100644
--- a/core/fpdfapi/parser/cpdf_object.cpp
+++ b/core/fpdfapi/parser/cpdf_object.cpp
@@ -19,8 +19,12 @@
CPDF_Object::~CPDF_Object() {}
-CPDF_Object* CPDF_Object::GetDirect() const {
- return const_cast<CPDF_Object*>(this);
+CPDF_Object* CPDF_Object::GetDirect() {
+ return this;
+}
+
+const CPDF_Object* CPDF_Object::GetDirect() const {
+ return this;
}
std::unique_ptr<CPDF_Object> CPDF_Object::CloneObjectNonCyclic(
@@ -55,7 +59,11 @@ int CPDF_Object::GetInteger() const {
return 0;
}
-CPDF_Dictionary* CPDF_Object::GetDict() const {
+CPDF_Dictionary* CPDF_Object::GetDict() {
+ return nullptr;
+}
+
+const CPDF_Dictionary* CPDF_Object::GetDict() const {
return nullptr;
}
diff --git a/core/fpdfapi/parser/cpdf_object.h b/core/fpdfapi/parser/cpdf_object.h
index 7a14492d70..21eec62b0d 100644
--- a/core/fpdfapi/parser/cpdf_object.h
+++ b/core/fpdfapi/parser/cpdf_object.h
@@ -56,12 +56,14 @@ class CPDF_Object {
// copied to the object it points to directly.
virtual std::unique_ptr<CPDF_Object> CloneDirectObject() const;
- virtual CPDF_Object* GetDirect() const;
+ virtual CPDF_Object* GetDirect();
+ virtual const CPDF_Object* GetDirect() const;
virtual ByteString GetString() const;
virtual WideString GetUnicodeText() const;
virtual float GetNumber() const;
virtual int GetInteger() const;
- virtual CPDF_Dictionary* GetDict() const;
+ virtual CPDF_Dictionary* GetDict();
+ virtual const CPDF_Dictionary* GetDict() const;
virtual void SetString(const ByteString& str);
diff --git a/core/fpdfapi/parser/cpdf_reference.cpp b/core/fpdfapi/parser/cpdf_reference.cpp
index 2ca0bddc4f..3f45a96c6b 100644
--- a/core/fpdfapi/parser/cpdf_reference.cpp
+++ b/core/fpdfapi/parser/cpdf_reference.cpp
@@ -21,25 +21,30 @@ CPDF_Object::Type CPDF_Reference::GetType() const {
}
ByteString CPDF_Reference::GetString() const {
- CPDF_Object* obj = SafeGetDirect();
+ const CPDF_Object* obj = SafeGetDirect();
return obj ? obj->GetString() : ByteString();
}
float CPDF_Reference::GetNumber() const {
- CPDF_Object* obj = SafeGetDirect();
+ const CPDF_Object* obj = SafeGetDirect();
return obj ? obj->GetNumber() : 0;
}
int CPDF_Reference::GetInteger() const {
- CPDF_Object* obj = SafeGetDirect();
+ const CPDF_Object* obj = SafeGetDirect();
return obj ? obj->GetInteger() : 0;
}
-CPDF_Dictionary* CPDF_Reference::GetDict() const {
+CPDF_Dictionary* CPDF_Reference::GetDict() {
CPDF_Object* obj = SafeGetDirect();
return obj ? obj->GetDict() : nullptr;
}
+const CPDF_Dictionary* CPDF_Reference::GetDict() const {
+ const CPDF_Object* obj = SafeGetDirect();
+ return obj ? obj->GetDict() : nullptr;
+}
+
bool CPDF_Reference::IsReference() const {
return true;
}
@@ -69,17 +74,27 @@ std::unique_ptr<CPDF_Object> CPDF_Reference::CloneNonCyclic(
return pdfium::MakeUnique<CPDF_Reference>(m_pObjList.Get(), m_RefObjNum);
}
-CPDF_Object* CPDF_Reference::SafeGetDirect() const {
+CPDF_Object* CPDF_Reference::SafeGetDirect() {
CPDF_Object* obj = GetDirect();
return (obj && !obj->IsReference()) ? obj : nullptr;
}
+const CPDF_Object* CPDF_Reference::SafeGetDirect() const {
+ const CPDF_Object* obj = GetDirect();
+ return (obj && !obj->IsReference()) ? obj : nullptr;
+}
+
void CPDF_Reference::SetRef(CPDF_IndirectObjectHolder* pDoc, uint32_t objnum) {
m_pObjList = pDoc;
m_RefObjNum = objnum;
}
-CPDF_Object* CPDF_Reference::GetDirect() const {
+CPDF_Object* CPDF_Reference::GetDirect() {
+ return m_pObjList ? m_pObjList->GetOrParseIndirectObject(m_RefObjNum)
+ : nullptr;
+}
+
+const CPDF_Object* CPDF_Reference::GetDirect() const {
return m_pObjList ? m_pObjList->GetOrParseIndirectObject(m_RefObjNum)
: nullptr;
}
diff --git a/core/fpdfapi/parser/cpdf_reference.h b/core/fpdfapi/parser/cpdf_reference.h
index b472b4a3ac..4cfb5c26e3 100644
--- a/core/fpdfapi/parser/cpdf_reference.h
+++ b/core/fpdfapi/parser/cpdf_reference.h
@@ -23,11 +23,13 @@ class CPDF_Reference : public CPDF_Object {
// CPDF_Object:
Type GetType() const override;
std::unique_ptr<CPDF_Object> Clone() const override;
- CPDF_Object* GetDirect() const override;
+ CPDF_Object* GetDirect() override;
+ const CPDF_Object* GetDirect() const override;
ByteString GetString() const override;
float GetNumber() const override;
int GetInteger() const override;
- CPDF_Dictionary* GetDict() const override;
+ CPDF_Dictionary* GetDict() override;
+ const CPDF_Dictionary* GetDict() const override;
bool IsReference() const override;
CPDF_Reference* AsReference() override;
const CPDF_Reference* AsReference() const override;
@@ -41,7 +43,8 @@ class CPDF_Reference : public CPDF_Object {
std::unique_ptr<CPDF_Object> CloneNonCyclic(
bool bDirect,
std::set<const CPDF_Object*>* pVisited) const override;
- CPDF_Object* SafeGetDirect() const;
+ CPDF_Object* SafeGetDirect();
+ const CPDF_Object* SafeGetDirect() const;
UnownedPtr<CPDF_IndirectObjectHolder> m_pObjList;
uint32_t m_RefObjNum;
diff --git a/core/fpdfapi/parser/cpdf_stream.cpp b/core/fpdfapi/parser/cpdf_stream.cpp
index 45d2ebb30d..fdbe308878 100644
--- a/core/fpdfapi/parser/cpdf_stream.cpp
+++ b/core/fpdfapi/parser/cpdf_stream.cpp
@@ -37,7 +37,11 @@ CPDF_Object::Type CPDF_Stream::GetType() const {
return STREAM;
}
-CPDF_Dictionary* CPDF_Stream::GetDict() const {
+CPDF_Dictionary* CPDF_Stream::GetDict() {
+ return m_pDict.get();
+}
+
+const CPDF_Dictionary* CPDF_Stream::GetDict() const {
return m_pDict.get();
}
@@ -84,11 +88,12 @@ std::unique_ptr<CPDF_Object> CPDF_Stream::CloneNonCyclic(
pAcc->LoadAllDataRaw();
uint32_t streamSize = pAcc->GetSize();
- CPDF_Dictionary* pDict = GetDict();
+ const CPDF_Dictionary* pDict = GetDict();
std::unique_ptr<CPDF_Dictionary> pNewDict;
if (pDict && !pdfium::ContainsKey(*pVisited, pDict)) {
- pNewDict = ToDictionary(
- static_cast<CPDF_Object*>(pDict)->CloneNonCyclic(bDirect, pVisited));
+ pNewDict =
+ ToDictionary(static_cast<const CPDF_Object*>(pDict)->CloneNonCyclic(
+ bDirect, pVisited));
}
return pdfium::MakeUnique<CPDF_Stream>(pAcc->DetachData(), streamSize,
std::move(pNewDict));
diff --git a/core/fpdfapi/parser/cpdf_stream.h b/core/fpdfapi/parser/cpdf_stream.h
index f8b09af7e2..cc3dcac227 100644
--- a/core/fpdfapi/parser/cpdf_stream.h
+++ b/core/fpdfapi/parser/cpdf_stream.h
@@ -19,7 +19,6 @@ class CPDF_Stream : public CPDF_Object {
public:
CPDF_Stream();
- // Takes ownership of |pData|.
CPDF_Stream(std::unique_ptr<uint8_t, FxFreeDeleter> pData,
uint32_t size,
std::unique_ptr<CPDF_Dictionary> pDict);
@@ -29,7 +28,8 @@ class CPDF_Stream : public CPDF_Object {
// CPDF_Object:
Type GetType() const override;
std::unique_ptr<CPDF_Object> Clone() const override;
- CPDF_Dictionary* GetDict() const override;
+ CPDF_Dictionary* GetDict() override;
+ const CPDF_Dictionary* GetDict() const override;
WideString GetUnicodeText() const override;
bool IsStream() const override;
CPDF_Stream* AsStream() override;
diff --git a/core/fpdfapi/parser/cpdf_stream_acc.cpp b/core/fpdfapi/parser/cpdf_stream_acc.cpp
index 9cce894fff..9cf9a1f464 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc.cpp
+++ b/core/fpdfapi/parser/cpdf_stream_acc.cpp
@@ -64,7 +64,7 @@ void CPDF_StreamAcc::LoadAllDataRaw() {
LoadAllData(true, 0, false);
}
-CPDF_Dictionary* CPDF_StreamAcc::GetDict() const {
+const CPDF_Dictionary* CPDF_StreamAcc::GetDict() const {
return m_pStream ? m_pStream->GetDict() : nullptr;
}
diff --git a/core/fpdfapi/parser/cpdf_stream_acc.h b/core/fpdfapi/parser/cpdf_stream_acc.h
index 89a454a0f0..1c9d5ef096 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc.h
+++ b/core/fpdfapi/parser/cpdf_stream_acc.h
@@ -29,7 +29,7 @@ class CPDF_StreamAcc : public Retainable {
void LoadAllDataRaw();
const CPDF_Stream* GetStream() const { return m_pStream.Get(); }
- CPDF_Dictionary* GetDict() const;
+ const CPDF_Dictionary* GetDict() const;
uint8_t* GetData() const;
uint32_t GetSize() const;
diff --git a/fpdfsdk/cpdfsdk_helpers.cpp b/fpdfsdk/cpdfsdk_helpers.cpp
index 1b90497456..5498909c32 100644
--- a/fpdfsdk/cpdfsdk_helpers.cpp
+++ b/fpdfsdk/cpdfsdk_helpers.cpp
@@ -330,8 +330,9 @@ unsigned long DecodeStreamMaybeCopyAndReturnLength(const CPDF_Stream* stream,
ASSERT(stream);
uint8_t* data = stream->GetRawData();
uint32_t len = stream->GetRawSize();
- CPDF_Dictionary* dict = stream->GetDict();
- CPDF_Object* decoder = dict ? dict->GetDirectObjectFor("Filter") : nullptr;
+ const CPDF_Dictionary* dict = stream->GetDict();
+ const CPDF_Object* decoder =
+ dict ? dict->GetDirectObjectFor("Filter") : nullptr;
if (decoder && (decoder->IsArray() || decoder->IsName())) {
// Decode the stream if one or more stream filters are specified.
uint8_t* decoded_data = nullptr;
diff --git a/fpdfsdk/fpdf_ppo.cpp b/fpdfsdk/fpdf_ppo.cpp
index c3b6402a97..bf8ed25af0 100644
--- a/fpdfsdk/fpdf_ppo.cpp
+++ b/fpdfsdk/fpdf_ppo.cpp
@@ -168,7 +168,7 @@ const CPDF_Object* PageDictGetInheritableTag(const CPDF_Dictionary* pDict,
CFX_FloatRect GetMediaBox(const CPDF_Dictionary* pPageDict) {
const CPDF_Object* pMediaBox =
PageDictGetInheritableTag(pPageDict, "MediaBox");
- CPDF_Array* pArray = ToArray(pMediaBox->GetDirect());
+ const CPDF_Array* pArray = ToArray(pMediaBox->GetDirect());
if (!pArray)
return CFX_FloatRect();
return pArray->GetRect();