Change CFX_ScanlineCompositor::Init() to take a span.

And InitSourcePalette() as well.

Change-Id: I60b7cab9461d6b4417e95ebcd4a11caf041eb9d1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/75236
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxge/dib/cfx_bitmapcomposer.cpp b/core/fxge/dib/cfx_bitmapcomposer.cpp
index d754fb8..a2556aa 100644
--- a/core/fxge/dib/cfx_bitmapcomposer.cpp
+++ b/core/fxge/dib/cfx_bitmapcomposer.cpp
@@ -46,8 +46,8 @@
                                  FXDIB_Format src_format,
                                  pdfium::span<const uint32_t> src_palette) {
   m_SrcFormat = src_format;
-  if (!m_Compositor.Init(m_pBitmap->GetFormat(), src_format, width,
-                         src_palette.data(), m_MaskColor, BlendMode::kNormal,
+  if (!m_Compositor.Init(m_pBitmap->GetFormat(), src_format, width, src_palette,
+                         m_MaskColor, BlendMode::kNormal,
                          m_pClipMask != nullptr || (m_BitmapAlpha < 255),
                          m_bRgbByteOrder)) {
     return false;
diff --git a/core/fxge/dib/cfx_dibitmap.cpp b/core/fxge/dib/cfx_dibitmap.cpp
index 6569700..f0b497f 100644
--- a/core/fxge/dib/cfx_dibitmap.cpp
+++ b/core/fxge/dib/cfx_dibitmap.cpp
@@ -901,7 +901,7 @@
   }
   CFX_ScanlineCompositor compositor;
   if (!compositor.Init(GetFormat(), pSrcBitmap->GetFormat(), width,
-                       pSrcBitmap->GetPaletteData(), 0, blend_type,
+                       pSrcBitmap->GetPaletteSpan(), 0, blend_type,
                        pClipMask != nullptr, bRgbByteOrder)) {
     return false;
   }
@@ -978,7 +978,7 @@
   int src_bpp = pMask->GetBPP();
   int Bpp = GetBPP() / 8;
   CFX_ScanlineCompositor compositor;
-  if (!compositor.Init(GetFormat(), pMask->GetFormat(), width, nullptr, color,
+  if (!compositor.Init(GetFormat(), pMask->GetFormat(), width, {}, color,
                        blend_type, pClipMask != nullptr, bRgbByteOrder)) {
     return false;
   }
diff --git a/core/fxge/dib/cfx_scanlinecompositor.cpp b/core/fxge/dib/cfx_scanlinecompositor.cpp
index 175ed4b..501e50d 100644
--- a/core/fxge/dib/cfx_scanlinecompositor.cpp
+++ b/core/fxge/dib/cfx_scanlinecompositor.cpp
@@ -2727,7 +2727,7 @@
 bool CFX_ScanlineCompositor::Init(FXDIB_Format dest_format,
                                   FXDIB_Format src_format,
                                   int32_t width,
-                                  const uint32_t* pSrcPalette,
+                                  pdfium::span<const uint32_t> src_palette,
                                   uint32_t mask_color,
                                   BlendMode blend_type,
                                   bool bClip,
@@ -2748,7 +2748,7 @@
     if (dest_format == FXDIB_8bppMask)
       return true;
 
-    InitSourcePalette(src_format, dest_format, pSrcPalette);
+    InitSourcePalette(src_format, dest_format, src_palette);
     m_iTransparency = (dest_format == FXDIB_Argb ? 1 : 0) +
                       (GetIsAlphaFromFormat(dest_format) ? 2 : 0) +
                       (GetIsCmykFromFormat(dest_format) ? 4 : 0) +
@@ -2779,9 +2779,10 @@
   }
 }
 
-void CFX_ScanlineCompositor::InitSourcePalette(FXDIB_Format src_format,
-                                               FXDIB_Format dest_format,
-                                               const uint32_t* pSrcPalette) {
+void CFX_ScanlineCompositor::InitSourcePalette(
+    FXDIB_Format src_format,
+    FXDIB_Format dest_format,
+    pdfium::span<const uint32_t> src_palette) {
   m_SrcPalette.Reset();
   const bool bIsSrcCmyk = GetIsCmykFromFormat(src_format);
   const bool bIsDstCmyk = GetIsCmykFromFormat(dest_format);
@@ -2789,12 +2790,12 @@
   const size_t pal_count = static_cast<size_t>(1)
                            << GetBppFromFormat(src_format);
 
-  if (pSrcPalette) {
+  if (!src_palette.empty()) {
     if (bIsDestBpp8) {
       pdfium::span<uint8_t> gray_pal = m_SrcPalette.Make8BitPalette(pal_count);
       if (bIsSrcCmyk) {
         for (size_t i = 0; i < pal_count; ++i) {
-          FX_CMYK cmyk = pSrcPalette[i];
+          FX_CMYK cmyk = src_palette[i];
           uint8_t r;
           uint8_t g;
           uint8_t b;
@@ -2805,7 +2806,7 @@
         }
       } else {
         for (size_t i = 0; i < pal_count; ++i) {
-          FX_ARGB argb = pSrcPalette[i];
+          FX_ARGB argb = src_palette[i];
           gray_pal[i] =
               FXRGB2GRAY(FXARGB_R(argb), FXARGB_G(argb), FXARGB_B(argb));
         }
@@ -2814,10 +2815,11 @@
     }
     pdfium::span<uint32_t> pPalette = m_SrcPalette.Make32BitPalette(pal_count);
     if (bIsDstCmyk == bIsSrcCmyk) {
-      memcpy(pPalette.data(), pSrcPalette, pal_count * sizeof(uint32_t));
+      for (size_t i = 0; i < pal_count; ++i)
+        pPalette[i] = src_palette[i];
     } else {
       for (size_t i = 0; i < pal_count; ++i) {
-        FX_CMYK cmyk = pSrcPalette[i];
+        FX_CMYK cmyk = src_palette[i];
         uint8_t r;
         uint8_t g;
         uint8_t b;
diff --git a/core/fxge/dib/cfx_scanlinecompositor.h b/core/fxge/dib/cfx_scanlinecompositor.h
index ec2ee8f..1287e02 100644
--- a/core/fxge/dib/cfx_scanlinecompositor.h
+++ b/core/fxge/dib/cfx_scanlinecompositor.h
@@ -21,7 +21,7 @@
   bool Init(FXDIB_Format dest_format,
             FXDIB_Format src_format,
             int32_t width,
-            const uint32_t* pSrcPalette,
+            pdfium::span<const uint32_t> src_palette,
             uint32_t mask_color,
             BlendMode blend_type,
             bool bClip,
@@ -80,7 +80,7 @@
 
   void InitSourcePalette(FXDIB_Format src_format,
                          FXDIB_Format dest_format,
-                         const uint32_t* pSrcPalette);
+                         pdfium::span<const uint32_t> src_palette);
 
   void InitSourceMask(uint32_t mask_color);