Avoid UNSAFE_TODO() in AreColorIndicesOutOfBounds().

Iteration over zipped spans avoids the unsafe indexing.

Change-Id: I1dc42dd0b53ba6c35bdcb8e0697b1c300e2376d9
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/127771
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_dib.cpp b/core/fpdfapi/page/cpdf_dib.cpp
index 393f53b..4e2dc2c 100644
--- a/core/fpdfapi/page/cpdf_dib.cpp
+++ b/core/fpdfapi/page/cpdf_dib.cpp
@@ -84,16 +84,13 @@
   return index < comp_datum.m_ColorKeyMin || index > comp_datum.m_ColorKeyMax;
 }
 
-bool AreColorIndicesOutOfBounds(const uint8_t* indices,
-                                const DIB_COMP_DATA* comp_data,
-                                size_t count) {
-  UNSAFE_TODO({
-    for (size_t i = 0; i < count; ++i) {
-      if (IsColorIndexOutOfBounds(indices[i], comp_data[i])) {
-        return true;
-      }
+bool AreColorIndicesOutOfBounds(pdfium::span<const uint8_t> indices,
+                                pdfium::span<const DIB_COMP_DATA> comp_data) {
+  for (auto [idx, datum] : fxcrt::Zip(indices, comp_data)) {
+    if (IsColorIndexOutOfBounds(idx, datum)) {
+      return true;
     }
-  });
+  }
   return false;
 }
 
@@ -1263,10 +1260,9 @@
       UNSAFE_TODO({
         uint8_t* alpha_channel = m_MaskBuf.data() + 3;
         for (int col = 0; col < GetWidth(); col++) {
-          const uint8_t* pPixel = pSrcLine.data() + col * 3;
+          const auto pPixel = pSrcLine.subspan(col * 3, 3);
           alpha_channel[col * 4] =
-              AreColorIndicesOutOfBounds(pPixel, m_CompData.data(), 3) ? 0xFF
-                                                                       : 0;
+              AreColorIndicesOutOfBounds(pPixel, m_CompData) ? 0xFF : 0;
         }
       });
     } else {