Change `CPDF_IndexedCS::lookup_table_` to a DataVector
Stop storing binary data in a ByteString.
Change-Id: I0feeb49ca2cd48f7cd75b0069b1b485108f22c36
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/119933
Reviewed-by: Thomas Sepez <tsepez@google.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_indexedcs.cpp b/core/fpdfapi/page/cpdf_indexedcs.cpp
index 8f4e195..6c11b9e 100644
--- a/core/fpdfapi/page/cpdf_indexedcs.cpp
+++ b/core/fpdfapi/page/cpdf_indexedcs.cpp
@@ -5,7 +5,6 @@
 #include "core/fpdfapi/page/cpdf_indexedcs.h"
 
 #include <set>
-#include <vector>
 
 #include "core/fpdfapi/page/cpdf_colorspace.h"
 #include "core/fpdfapi/page/cpdf_docpagedata.h"
@@ -76,12 +75,16 @@
     return 0;
   }
 
-  if (const CPDF_String* pString = pTableObj->AsString()) {
-    lookup_table_ = pString->GetString();
-  } else if (const CPDF_Stream* pStream = pTableObj->AsStream()) {
-    auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pdfium::WrapRetain(pStream));
-    pAcc->LoadAllDataFiltered();
-    lookup_table_ = ByteStringView(pAcc->GetSpan());
+  if (const CPDF_String* str_obj = pTableObj->AsString()) {
+    ByteString str_data = str_obj->GetString();
+    pdfium::span<const uint8_t> str_span = str_data.unsigned_span();
+    lookup_table_ = DataVector<uint8_t>(str_span.begin(), str_span.end());
+  } else if (const CPDF_Stream* stream_obj = pTableObj->AsStream()) {
+    auto acc =
+        pdfium::MakeRetain<CPDF_StreamAcc>(pdfium::WrapRetain(stream_obj));
+    acc->LoadAllDataFiltered();
+    pdfium::span<const uint8_t> str_span = acc->GetSpan();
+    lookup_table_ = DataVector<uint8_t>(str_span.begin(), str_span.end());
   }
   return 1;
 }
@@ -101,19 +104,18 @@
   FX_SAFE_SIZE_T length = index;
   length += 1;
   length *= base_component_count_;
-  if (!length.IsValid() || length.ValueOrDie() > lookup_table_.GetLength()) {
+  if (!length.IsValid() || length.ValueOrDie() > lookup_table_.size()) {
     *R = 0;
     *G = 0;
     *B = 0;
     return false;
   }
 
-  std::vector<float> comps(base_component_count_);
-  pdfium::span<const uint8_t> pTable = lookup_table_.unsigned_span();
+  DataVector<float> comps(base_component_count_);
   for (uint32_t i = 0; i < base_component_count_; ++i) {
     comps[i] = component_min_max_[i].min +
                component_min_max_[i].max *
-                   pTable[index * base_component_count_ + i] / 255;
+                   lookup_table_[index * base_component_count_ + i] / 255;
   }
   return m_pBaseCS->GetRGB(comps, R, G, B);
 }
diff --git a/core/fpdfapi/page/cpdf_indexedcs.h b/core/fpdfapi/page/cpdf_indexedcs.h
index 22690c6..4e2cffd 100644
--- a/core/fpdfapi/page/cpdf_indexedcs.h
+++ b/core/fpdfapi/page/cpdf_indexedcs.h
@@ -5,10 +5,11 @@
 #ifndef CORE_FPDFAPI_PAGE_CPDF_INDEXEDCS_H_
 #define CORE_FPDFAPI_PAGE_CPDF_INDEXEDCS_H_
 
+#include <stdint.h>
+
 #include <set>
 
 #include "core/fpdfapi/page/cpdf_basedcs.h"
-#include "core/fxcrt/bytestring.h"
 #include "core/fxcrt/data_vector.h"
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "core/fxcrt/retain_ptr.h"
@@ -43,7 +44,7 @@
 
   uint32_t base_component_count_ = 0;
   int max_index_ = 0;
-  ByteString lookup_table_;
+  DataVector<uint8_t> lookup_table_;
   DataVector<IndexedColorMinMax> component_min_max_;
 };