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);
 
