Fix unsafe buffer warnings in cfx_dibbase_skia.cpp

Convert one API to span<> and mark one pointer UNSAFE.

Change-Id: I931666d6d9b845042999dfa036037c2a6506cf08
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/119910
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/fxge/skia/cfx_dibbase_skia.cpp b/core/fxge/skia/cfx_dibbase_skia.cpp
index b48ecdf..7a86c73 100644
--- a/core/fxge/skia/cfx_dibbase_skia.cpp
+++ b/core/fxge/skia/cfx_dibbase_skia.cpp
@@ -2,11 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#if defined(UNSAFE_BUFFERS_BUILD)
-// TODO(crbug.com/pdfium/2154): resolve buffer safety issues.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "core/fxge/dib/cfx_dibbase.h"
 
 #include <stddef.h>
@@ -17,6 +12,7 @@
 #include <utility>
 
 #include "core/fxcrt/check_op.h"
+#include "core/fxcrt/compiler_specific.h"
 #include "core/fxcrt/fx_2d_size.h"
 #include "core/fxcrt/fx_memory.h"
 #include "core/fxcrt/fx_memory_wrappers.h"
@@ -85,7 +81,7 @@
   using Result = std::invoke_result_t<PixelTransform, bool>;
 
   static Result Invoke(PixelTransform&& pixel_transform,
-                       const uint8_t* scanline,
+                       pdfium::span<const uint8_t> scanline,
                        size_t column) {
     uint8_t kMask = 1 << (7 - column % 8);
     return pixel_transform(!!(scanline[column / 8] & kMask));
@@ -98,7 +94,7 @@
   using Result = std::invoke_result_t<PixelTransform, uint8_t>;
 
   static Result Invoke(PixelTransform&& pixel_transform,
-                       const uint8_t* scanline,
+                       pdfium::span<const uint8_t> scanline,
                        size_t column) {
     return pixel_transform(scanline[column]);
   }
@@ -111,7 +107,7 @@
       std::invoke_result_t<PixelTransform, uint8_t, uint8_t, uint8_t>;
 
   static Result Invoke(PixelTransform&& pixel_transform,
-                       const uint8_t* scanline,
+                       pdfium::span<const uint8_t> scanline,
                        size_t column) {
     size_t offset = column * 3;
     return pixel_transform(scanline[offset + 2], scanline[offset + 1],
@@ -162,9 +158,8 @@
     ValidateScanlineSize(scanline, min_row_bytes);
 
     for (int column = 0; column < width; ++column) {
-      *output_cursor++ =
-          Traits::Invoke(std::forward<PixelTransform>(pixel_transform),
-                         scanline.data(), column);
+      UNSAFE_TODO(*output_cursor++) = Traits::Invoke(
+          std::forward<PixelTransform>(pixel_transform), scanline, column);
     }
   }