diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index 6478bd5..e3eb1d0 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -1114,7 +1114,7 @@
     return 1;
 
   const CPDF_Object* pAltArray = pArray->GetDirectObjectAt(2);
-  if (pAltArray == m_pArray)
+  if (pAltArray == GetArray())
     return 0;
 
   m_pBaseCS = Load(pDoc, pAltArray, pVisited);
@@ -1187,7 +1187,7 @@
     return 0;
 
   const CPDF_Object* pAltCS = pArray->GetDirectObjectAt(2);
-  if (!pAltCS || pAltCS == m_pArray)
+  if (!pAltCS || pAltCS == GetArray())
     return 0;
 
   m_pBaseCS = Load(pDoc, pAltCS, pVisited);
diff --git a/core/fpdfapi/page/cpdf_colorspace.h b/core/fpdfapi/page/cpdf_colorspace.h
index 973cd71..b528e69 100644
--- a/core/fpdfapi/page/cpdf_colorspace.h
+++ b/core/fpdfapi/page/cpdf_colorspace.h
@@ -82,8 +82,6 @@
   static uint32_t ComponentsForFamily(Family family);
   static bool IsValidIccComponents(int components);
 
-  const CPDF_Array* GetArray() const { return m_pArray.Get(); }
-
   // Should only be called if this colorspace is not a pattern.
   std::vector<float> CreateBufAndSetDefaultColor() const;
 
@@ -134,11 +132,9 @@
   // components count.
   void SetComponentsForStockCS(uint32_t nComponents);
 
+  const CPDF_Array* GetArray() const { return m_pArray.Get(); }
   bool IsStdConversionEnabled() const { return m_dwStdConversion != 0; }
 
-  RetainPtr<const CPDF_Array> m_pArray;
-  const Family m_Family;
-
  private:
   friend class CPDF_CalGray_TranslateImageLine_Test;
   friend class CPDF_CalRGB_TranslateImageLine_Test;
@@ -146,8 +142,10 @@
   static RetainPtr<CPDF_ColorSpace> AllocateColorSpace(
       ByteStringView bsFamilyName);
 
+  const Family m_Family;
   uint32_t m_dwStdConversion = 0;
   uint32_t m_nComponents = 0;
+  RetainPtr<const CPDF_Array> m_pArray;
 };
 
 #endif  // CORE_FPDFAPI_PAGE_CPDF_COLORSPACE_H_
diff --git a/core/fpdfapi/page/cpdf_devicecs.cpp b/core/fpdfapi/page/cpdf_devicecs.cpp
index 494a2d0..3d87766 100644
--- a/core/fpdfapi/page/cpdf_devicecs.cpp
+++ b/core/fpdfapi/page/cpdf_devicecs.cpp
@@ -48,7 +48,7 @@
                            float* R,
                            float* G,
                            float* B) const {
-  switch (m_Family) {
+  switch (GetFamily()) {
     case Family::kDeviceGray:
       *R = NormalizeChannel(pBuf[0]);
       *G = *R;
@@ -85,7 +85,7 @@
                                        bool bTransMask) const {
   uint8_t* pDestBuf = dest_span.data();
   const uint8_t* pSrcBuf = src_span.data();
-  switch (m_Family) {
+  switch (GetFamily()) {
     case Family::kDeviceGray:
       for (int i = 0; i < pixels; i++) {
         // Compiler can not conclude that src/dest don't overlap, avoid
diff --git a/core/fpdfapi/page/cpdf_indexedcs.cpp b/core/fpdfapi/page/cpdf_indexedcs.cpp
index 06c5ce4..10e112e 100644
--- a/core/fpdfapi/page/cpdf_indexedcs.cpp
+++ b/core/fpdfapi/page/cpdf_indexedcs.cpp
@@ -35,7 +35,7 @@
     return 0;
 
   const CPDF_Object* pBaseObj = pArray->GetDirectObjectAt(1);
-  if (pBaseObj == m_pArray)
+  if (pBaseObj == GetArray())
     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 dad3db9..5b85b3e 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) {
   const CPDF_Object* pBaseCS = pArray->GetDirectObjectAt(1);
-  if (pBaseCS == m_pArray)
+  if (pBaseCS == GetArray())
     return 0;
 
   auto* pDocPageData = CPDF_DocPageData::FromDocument(pDoc);
