diff options
author | Lei Zhang <thestig@chromium.org> | 2018-05-09 22:02:32 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-05-09 22:02:32 +0000 |
commit | 7e28208d26764438bef62e051d2e1fed13e1e0ec (patch) | |
tree | 781d3e250a4fd3af3eb16da299b56938b21a7414 /core/fpdfapi/parser | |
parent | 52489ee8114cf476342231be610e75b324290920 (diff) | |
download | pdfium-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>
Diffstat (limited to 'core/fpdfapi/parser')
-rw-r--r-- | core/fpdfapi/parser/cpdf_array.cpp | 4 | ||||
-rw-r--r-- | core/fpdfapi/parser/cpdf_array.h | 4 | ||||
-rw-r--r-- | core/fpdfapi/parser/cpdf_dictionary.cpp | 10 | ||||
-rw-r--r-- | core/fpdfapi/parser/cpdf_dictionary.h | 3 | ||||
-rw-r--r-- | core/fpdfapi/parser/cpdf_object.cpp | 14 | ||||
-rw-r--r-- | core/fpdfapi/parser/cpdf_object.h | 6 | ||||
-rw-r--r-- | core/fpdfapi/parser/cpdf_reference.cpp | 27 | ||||
-rw-r--r-- | core/fpdfapi/parser/cpdf_reference.h | 9 | ||||
-rw-r--r-- | core/fpdfapi/parser/cpdf_stream.cpp | 13 | ||||
-rw-r--r-- | core/fpdfapi/parser/cpdf_stream.h | 4 | ||||
-rw-r--r-- | core/fpdfapi/parser/cpdf_stream_acc.cpp | 2 | ||||
-rw-r--r-- | core/fpdfapi/parser/cpdf_stream_acc.h | 2 |
12 files changed, 67 insertions, 31 deletions
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; |