diff --git a/core/fpdfapi/parser/cpdf_array.cpp b/core/fpdfapi/parser/cpdf_array.cpp
index 1c51341..a7ce4e6 100644
--- a/core/fpdfapi/parser/cpdf_array.cpp
+++ b/core/fpdfapi/parser/cpdf_array.cpp
@@ -9,6 +9,7 @@
 #include <set>
 #include <utility>
 
+#include "core/fpdfapi/parser/cpdf_boolean.h"
 #include "core/fpdfapi/parser/cpdf_name.h"
 #include "core/fpdfapi/parser/cpdf_number.h"
 #include "core/fpdfapi/parser/cpdf_reference.h"
@@ -123,6 +124,13 @@
   return m_Objects[index]->GetUnicodeText();
 }
 
+bool CPDF_Array::GetBooleanAt(size_t index, bool bDefault) const {
+  if (index >= m_Objects.size())
+    return bDefault;
+  const CPDF_Object* p = m_Objects[index].Get();
+  return ToBoolean(p) ? p->GetInteger() != 0 : bDefault;
+}
+
 int CPDF_Array::GetIntegerAt(size_t index) const {
   if (index >= m_Objects.size())
     return 0;
diff --git a/core/fpdfapi/parser/cpdf_array.h b/core/fpdfapi/parser/cpdf_array.h
index 34b7c9a..2a12d99 100644
--- a/core/fpdfapi/parser/cpdf_array.h
+++ b/core/fpdfapi/parser/cpdf_array.h
@@ -43,6 +43,7 @@
   const CPDF_Object* GetDirectObjectAt(size_t index) const;
   ByteString GetStringAt(size_t index) const;
   WideString GetUnicodeTextAt(size_t index) const;
+  bool GetBooleanAt(size_t index, bool bDefault) const;
   int GetIntegerAt(size_t index) const;
   float GetNumberAt(size_t index) const;
   CPDF_Dictionary* GetDictAt(size_t index);
diff --git a/core/fpdfapi/parser/cpdf_array_unittest.cpp b/core/fpdfapi/parser/cpdf_array_unittest.cpp
index a941160..457961f 100644
--- a/core/fpdfapi/parser/cpdf_array_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_array_unittest.cpp
@@ -7,11 +7,32 @@
 #include <memory>
 #include <utility>
 
+#include "core/fpdfapi/parser/cpdf_boolean.h"
 #include "core/fpdfapi/parser/cpdf_number.h"
 #include "core/fpdfapi/parser/cpdf_reference.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/base/ptr_util.h"
 
+TEST(cpdf_array, GetBooleanAt) {
+  auto arr = pdfium::MakeRetain<CPDF_Array>();
+  arr->AddNew<CPDF_Boolean>(true);
+  arr->AddNew<CPDF_Boolean>(false);
+  arr->AddNew<CPDF_Number>(100);
+  arr->AddNew<CPDF_Number>(0);
+
+  ASSERT_EQ(4u, arr->size());
+  EXPECT_TRUE(arr->GetBooleanAt(0, true));
+  EXPECT_TRUE(arr->GetBooleanAt(0, false));
+  EXPECT_FALSE(arr->GetBooleanAt(1, true));
+  EXPECT_FALSE(arr->GetBooleanAt(1, false));
+  EXPECT_TRUE(arr->GetBooleanAt(2, true));
+  EXPECT_FALSE(arr->GetBooleanAt(2, false));
+  EXPECT_TRUE(arr->GetBooleanAt(3, true));
+  EXPECT_FALSE(arr->GetBooleanAt(3, false));
+  EXPECT_TRUE(arr->GetBooleanAt(99, true));
+  EXPECT_FALSE(arr->GetBooleanAt(99, false));
+}
+
 TEST(cpdf_array, RemoveAt) {
   {
     const int elems[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 484eff1..d412b52 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -158,13 +158,10 @@
     t_min = pArray->GetNumberAt(0);
     t_max = pArray->GetNumberAt(1);
   }
-  bool bStartExtend = false;
-  bool bEndExtend = false;
   pArray = pDict->GetArrayFor("Extend");
-  if (pArray) {
-    bStartExtend = !!pArray->GetIntegerAt(0);
-    bEndExtend = !!pArray->GetIntegerAt(1);
-  }
+  const bool bStartExtend = pArray && pArray->GetBooleanAt(0, false);
+  const bool bEndExtend = pArray && pArray->GetBooleanAt(1, false);
+
   int width = pBitmap->GetWidth();
   int height = pBitmap->GetHeight();
   float x_span = end_x - start_x;
@@ -231,13 +228,9 @@
     t_min = pArray->GetNumberAt(0);
     t_max = pArray->GetNumberAt(1);
   }
-  bool bStartExtend = false;
-  bool bEndExtend = false;
   pArray = pDict->GetArrayFor("Extend");
-  if (pArray) {
-    bStartExtend = !!pArray->GetIntegerAt(0);
-    bEndExtend = !!pArray->GetIntegerAt(1);
-  }
+  const bool bStartExtend = pArray && pArray->GetBooleanAt(0, false);
+  const bool bEndExtend = pArray && pArray->GetBooleanAt(1, false);
 
   std::array<FX_ARGB, kShadingSteps> shading_steps =
       GetShadingSteps(t_min, t_max, funcs, pCS, alpha, total_results);
