Avoid vending pointers to CPDF_ColorSpace::m_pArray

Callers just perform immediate comparisons, so provide equivalent
method to limit possible misuses of result.

Change-Id: I5c3c95963f87eae95b5e4471cf40da069ed8e558
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/98716
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index ea1e7af..222be78 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -1114,7 +1114,7 @@
     return 1;
 
   RetainPtr<const CPDF_Object> pAltArray = pArray->GetDirectObjectAt(2);
-  if (pAltArray == GetArray())
+  if (HasSameArray(pAltArray.Get()))
     return 0;
 
   m_pBaseCS = Load(pDoc, pAltArray.Get(), pVisited);
@@ -1187,7 +1187,7 @@
     return 0;
 
   RetainPtr<const CPDF_Object> pAltCS = pArray->GetDirectObjectAt(2);
-  if (!pAltCS || pAltCS == GetArray())
+  if (!pAltCS || HasSameArray(pAltCS.Get()))
     return 0;
 
   m_pBaseCS = Load(pDoc, pAltCS.Get(), pVisited);
diff --git a/core/fpdfapi/page/cpdf_colorspace.h b/core/fpdfapi/page/cpdf_colorspace.h
index 6fa8d19..071b76b 100644
--- a/core/fpdfapi/page/cpdf_colorspace.h
+++ b/core/fpdfapi/page/cpdf_colorspace.h
@@ -16,16 +16,16 @@
 #include <vector>
 
 #include "core/fpdfapi/page/cpdf_pattern.h"
+#include "core/fpdfapi/parser/cpdf_array.h"
+#include "core/fpdfapi/parser/cpdf_object.h"
 #include "core/fxcrt/bytestring.h"
 #include "core/fxcrt/observed_ptr.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxcrt/unowned_ptr.h"
 #include "third_party/base/span.h"
 
-class CPDF_Array;
 class CPDF_Document;
 class CPDF_IndexedCS;
-class CPDF_Object;
 class CPDF_PatternCS;
 
 constexpr size_t kMaxPatternColorComps = 16;
@@ -133,8 +133,8 @@
   // components count.
   void SetComponentsForStockCS(uint32_t nComponents);
 
-  const CPDF_Array* GetArray() const { return m_pArray.Get(); }
   bool IsStdConversionEnabled() const { return m_dwStdConversion != 0; }
+  bool HasSameArray(const CPDF_Object* pObj) const { return m_pArray == pObj; }
 
  private:
   friend class CPDF_CalGray_TranslateImageLine_Test;
diff --git a/core/fpdfapi/page/cpdf_indexedcs.cpp b/core/fpdfapi/page/cpdf_indexedcs.cpp
index 73a3820..e45f9f3 100644
--- a/core/fpdfapi/page/cpdf_indexedcs.cpp
+++ b/core/fpdfapi/page/cpdf_indexedcs.cpp
@@ -37,7 +37,7 @@
     return 0;
 
   RetainPtr<const CPDF_Object> pBaseObj = pArray->GetDirectObjectAt(1);
-  if (pBaseObj == GetArray())
+  if (HasSameArray(pBaseObj.Get()))
     return 0;
 
   auto* pDocPageData = CPDF_DocPageData::FromDocument(pDoc);
diff --git a/core/fpdfapi/page/cpdf_patterncs.cpp b/core/fpdfapi/page/cpdf_patterncs.cpp
index f2ef15e..60252ec 100644
--- a/core/fpdfapi/page/cpdf_patterncs.cpp
+++ b/core/fpdfapi/page/cpdf_patterncs.cpp
@@ -23,7 +23,7 @@
                                 const CPDF_Array* pArray,
                                 std::set<const CPDF_Object*>* pVisited) {
   RetainPtr<const CPDF_Object> pBaseCS = pArray->GetDirectObjectAt(1);
-  if (pBaseCS == GetArray())
+  if (HasSameArray(pBaseCS.Get()))
     return 0;
 
   auto* pDocPageData = CPDF_DocPageData::FromDocument(pDoc);