summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/parser')
-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
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;