Convert some CFX_ScanlineCompositor args to span<>.

Change-Id: Id16d4823e00fb6ec538f99621915a1599309b213
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/85750
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxge/dib/cfx_bitmapcomposer.cpp b/core/fxge/dib/cfx_bitmapcomposer.cpp
index 4aa97dd..baa9e06 100644
--- a/core/fxge/dib/cfx_bitmapcomposer.cpp
+++ b/core/fxge/dib/cfx_bitmapcomposer.cpp
@@ -69,21 +69,20 @@
   return true;
 }
 
-void CFX_BitmapComposer::DoCompose(uint8_t* dest_scan,
+void CFX_BitmapComposer::DoCompose(pdfium::span<uint8_t> dest_scan,
                                    pdfium::span<const uint8_t> src_scan,
                                    int dest_width,
-                                   const uint8_t* clip_scan,
+                                   pdfium::span<const uint8_t> clip_scan,
                                    pdfium::span<const uint8_t> src_extra_alpha,
                                    pdfium::span<uint8_t> dst_extra_alpha) {
-  uint8_t* pAddClipScan = m_pAddClipScan.data();
   if (m_BitmapAlpha < 255) {
-    if (clip_scan) {
+    if (!clip_scan.empty()) {
       for (int i = 0; i < dest_width; ++i)
-        pAddClipScan[i] = clip_scan[i] * m_BitmapAlpha / 255;
+        m_pAddClipScan[i] = clip_scan[i] * m_BitmapAlpha / 255;
     } else {
-      memset(pAddClipScan, m_BitmapAlpha, dest_width);
+      memset(m_pAddClipScan.data(), m_BitmapAlpha, dest_width);
     }
-    clip_scan = pAddClipScan;
+    clip_scan = m_pAddClipScan;
   }
   if (m_SrcFormat == FXDIB_Format::k8bppMask) {
     m_Compositor.CompositeByteMaskLine(dest_scan, src_scan, dest_width,
@@ -107,24 +106,23 @@
     ComposeScanlineV(line, scanline, scan_extra_alpha);
     return;
   }
-  const uint8_t* clip_scan = nullptr;
+  pdfium::span<const uint8_t> clip_scan;
   if (m_pClipMask) {
     clip_scan =
         m_pClipMask
             ->GetWritableScanline(m_DestTop + line - m_pClipRgn->GetBox().top)
-            .subspan(m_DestLeft - m_pClipRgn->GetBox().left)
-            .data();
+            .subspan(m_DestLeft - m_pClipRgn->GetBox().left);
   }
-  uint8_t* dest_scan = m_pBitmap->GetWritableScanline(line + m_DestTop).data();
-  if (dest_scan) {
+  pdfium::span<uint8_t> dest_scan =
+      m_pBitmap->GetWritableScanline(line + m_DestTop);
+  if (!dest_scan.empty()) {
     FX_SAFE_UINT32 offset = m_DestLeft;
     offset *= m_pBitmap->GetBPP();
     offset /= 8;
     if (!offset.IsValid())
       return;
 
-    // Help some compilers perform pointer arithmetic against safe numerics.
-    dest_scan += static_cast<uint32_t>(offset.ValueOrDie());
+    dest_scan = dest_scan.subspan(offset.ValueOrDie());
   }
   pdfium::span<uint8_t> dest_alpha_scan =
       m_pBitmap->GetWritableAlphaMaskScanline(line + m_DestTop);
@@ -176,9 +174,9 @@
       dest_alpha_scan += y_alpha_step;
     }
   }
-  uint8_t* clip_scan = nullptr;
+  pdfium::span<uint8_t> clip_scan;
   if (m_pClipMask) {
-    clip_scan = m_pClipScanV.data();
+    clip_scan = m_pClipScanV;
     int clip_pitch = m_pClipMask->GetPitch();
     const uint8_t* src_clip =
         m_pClipMask->GetScanline(m_DestTop - m_pClipRgn->GetBox().top)
@@ -193,8 +191,8 @@
       src_clip += clip_pitch;
     }
   }
-  DoCompose(m_pScanlineV.data(), scanline, m_DestHeight, clip_scan,
-            scan_extra_alpha, m_pScanlineAlphaV);
+  DoCompose(m_pScanlineV, scanline, m_DestHeight, clip_scan, scan_extra_alpha,
+            m_pScanlineAlphaV);
   src_scan = m_pScanlineV.data();
   dest_scan = dest_buf;
   for (int i = 0; i < m_DestHeight; ++i) {
diff --git a/core/fxge/dib/cfx_bitmapcomposer.h b/core/fxge/dib/cfx_bitmapcomposer.h
index f38297d..c25850d 100644
--- a/core/fxge/dib/cfx_bitmapcomposer.h
+++ b/core/fxge/dib/cfx_bitmapcomposer.h
@@ -47,10 +47,10 @@
                        pdfium::span<const uint8_t> scan_extra_alpha) override;
 
  private:
-  void DoCompose(uint8_t* dest_scan,
+  void DoCompose(pdfium::span<uint8_t> dest_scan,
                  pdfium::span<const uint8_t> src_scan,
                  int dest_width,
-                 const uint8_t* clip_scan,
+                 pdfium::span<const uint8_t> clip_scan,
                  pdfium::span<const uint8_t> src_extra_alpha,
                  pdfium::span<uint8_t> dst_extra_alpha);
   void ComposeScanlineV(int line,
diff --git a/core/fxge/dib/cfx_dibitmap.cpp b/core/fxge/dib/cfx_dibitmap.cpp
index d39f7f9..29419e5 100644
--- a/core/fxge/dib/cfx_dibitmap.cpp
+++ b/core/fxge/dib/cfx_dibitmap.cpp
@@ -777,8 +777,8 @@
 
   RetainPtr<CFX_DIBitmap> pSrcAlphaMask = pSrcBitmap->GetAlphaMask();
   for (int row = 0; row < height; row++) {
-    uint8_t* dest_scan =
-        m_pBuffer.Get() + (dest_top + row) * m_Pitch + dest_left * dest_Bpp;
+    pdfium::span<uint8_t> dest_scan =
+        GetWritableScanline(dest_top + row).subspan(dest_left * dest_Bpp);
     pdfium::span<const uint8_t> src_scan =
         pSrcBitmap->GetScanline(src_top + row).subspan(src_left * src_Bpp);
     pdfium::span<const uint8_t> src_scan_extra_alpha =
@@ -789,11 +789,10 @@
         m_pAlphaMask ? m_pAlphaMask->GetWritableScanline(dest_top + row)
                            .subspan(dest_left)
                      : pdfium::span<uint8_t>();
-    const uint8_t* clip_scan = nullptr;
+    pdfium::span<const uint8_t> clip_scan;
     if (pClipMask) {
-      clip_scan = pClipMask->m_pBuffer.Get() +
-                  (dest_top + row - clip_box.top) * pClipMask->m_Pitch +
-                  (dest_left - clip_box.left);
+      clip_scan = pClipMask->GetWritableScanline(dest_top + row - clip_box.top)
+                      .subspan(dest_left - clip_box.left);
     }
     if (bRgb) {
       compositor.CompositeRgbBitmapLine(dest_scan, src_scan, width, clip_scan,
@@ -854,18 +853,17 @@
     return false;
   }
   for (int row = 0; row < height; row++) {
-    uint8_t* dest_scan =
-        m_pBuffer.Get() + (dest_top + row) * m_Pitch + dest_left * Bpp;
+    pdfium::span<uint8_t> dest_scan =
+        GetWritableScanline(dest_top + row).subspan(dest_left * Bpp);
     pdfium::span<const uint8_t> src_scan = pMask->GetScanline(src_top + row);
     pdfium::span<uint8_t> dst_scan_extra_alpha =
         m_pAlphaMask ? m_pAlphaMask->GetWritableScanline(dest_top + row)
                            .subspan(dest_left)
                      : pdfium::span<uint8_t>();
-    const uint8_t* clip_scan = nullptr;
+    pdfium::span<const uint8_t> clip_scan;
     if (pClipMask) {
-      clip_scan = pClipMask->m_pBuffer.Get() +
-                  (dest_top + row - clip_box.top) * pClipMask->m_Pitch +
-                  (dest_left - clip_box.left);
+      clip_scan = pClipMask->GetScanline(dest_top + row - clip_box.top)
+                      .subspan(dest_left - clip_box.left);
     }
     if (src_bpp == 1) {
       compositor.CompositeBitMaskLine(dest_scan, src_scan, src_left, width,
diff --git a/core/fxge/dib/cfx_scanlinecompositor.cpp b/core/fxge/dib/cfx_scanlinecompositor.cpp
index 858176c..50add9a 100644
--- a/core/fxge/dib/cfx_scanlinecompositor.cpp
+++ b/core/fxge/dib/cfx_scanlinecompositor.cpp
@@ -2772,10 +2772,10 @@
 }
 
 void CFX_ScanlineCompositor::CompositeRgbBitmapLine(
-    uint8_t* dest_scan,
+    pdfium::span<uint8_t> dest_scan,
     pdfium::span<const uint8_t> src_scan,
     int width,
-    const uint8_t* clip_scan,
+    pdfium::span<const uint8_t> clip_scan,
     pdfium::span<const uint8_t> src_extra_alpha,
     pdfium::span<uint8_t> dst_extra_alpha) {
   int src_Bpp = GetCompsFromFormat(m_SrcFormat);
@@ -2786,52 +2786,58 @@
       case 4:
       case 8:
       case 12:
-        CompositeRow_Argb2Argb_RgbByteOrder(dest_scan, src_scan.data(), width,
-                                            m_BlendType, clip_scan);
+        CompositeRow_Argb2Argb_RgbByteOrder(dest_scan.data(), src_scan.data(),
+                                            width, m_BlendType,
+                                            clip_scan.data());
         break;
       case 1:
         CompositeRow_Rgb2Argb_Blend_NoClip_RgbByteOrder(
-            dest_scan, src_scan.data(), width, m_BlendType, src_Bpp);
+            dest_scan.data(), src_scan.data(), width, m_BlendType, src_Bpp);
         break;
       case 2:
       case 10:
-        CompositeRow_Argb2Rgb_Blend_RgbByteOrder(dest_scan, src_scan.data(),
-                                                 width, m_BlendType, dest_Bpp,
-                                                 clip_scan);
+        CompositeRow_Argb2Rgb_Blend_RgbByteOrder(
+            dest_scan.data(), src_scan.data(), width, m_BlendType, dest_Bpp,
+            clip_scan.data());
         break;
       case 3:
         CompositeRow_Rgb2Rgb_Blend_NoClip_RgbByteOrder(
-            dest_scan, src_scan.data(), width, m_BlendType, dest_Bpp, src_Bpp);
+            dest_scan.data(), src_scan.data(), width, m_BlendType, dest_Bpp,
+            src_Bpp);
         break;
       case 5:
         CompositeRow_Rgb2Argb_NoBlend_NoClip_RgbByteOrder(
-            dest_scan, src_scan.data(), width, src_Bpp);
+            dest_scan.data(), src_scan.data(), width, src_Bpp);
         break;
       case 6:
       case 14:
-        CompositeRow_Argb2Rgb_NoBlend_RgbByteOrder(dest_scan, src_scan.data(),
-                                                   width, dest_Bpp, clip_scan);
+        CompositeRow_Argb2Rgb_NoBlend_RgbByteOrder(dest_scan.data(),
+                                                   src_scan.data(), width,
+                                                   dest_Bpp, clip_scan.data());
         break;
       case 7:
         CompositeRow_Rgb2Rgb_NoBlend_NoClip_RgbByteOrder(
-            dest_scan, src_scan.data(), width, dest_Bpp, src_Bpp);
+            dest_scan.data(), src_scan.data(), width, dest_Bpp, src_Bpp);
         break;
       case 9:
         CompositeRow_Rgb2Argb_Blend_Clip_RgbByteOrder(
-            dest_scan, src_scan.data(), width, m_BlendType, src_Bpp, clip_scan);
+            dest_scan.data(), src_scan.data(), width, m_BlendType, src_Bpp,
+            clip_scan.data());
         break;
       case 11:
         CompositeRow_Rgb2Rgb_Blend_Clip_RgbByteOrder(
-            dest_scan, src_scan.data(), width, m_BlendType, dest_Bpp, src_Bpp,
-            clip_scan);
+            dest_scan.data(), src_scan.data(), width, m_BlendType, dest_Bpp,
+            src_Bpp, clip_scan.data());
         break;
       case 13:
         CompositeRow_Rgb2Argb_NoBlend_Clip_RgbByteOrder(
-            dest_scan, src_scan.data(), width, src_Bpp, clip_scan);
+            dest_scan.data(), src_scan.data(), width, src_Bpp,
+            clip_scan.data());
         break;
       case 15:
         CompositeRow_Rgb2Rgb_NoBlend_Clip_RgbByteOrder(
-            dest_scan, src_scan.data(), width, dest_Bpp, src_Bpp, clip_scan);
+            dest_scan.data(), src_scan.data(), width, dest_Bpp, src_Bpp,
+            clip_scan.data());
         break;
     }
     return;
@@ -2839,32 +2845,35 @@
   if (m_DestFormat == FXDIB_Format::k8bppMask) {
     if (GetIsAlphaFromFormat(m_SrcFormat)) {
       if (m_SrcFormat == FXDIB_Format::kArgb) {
-        CompositeRow_AlphaToMask(dest_scan, src_scan.data(), width, clip_scan,
-                                 4);
+        CompositeRow_AlphaToMask(dest_scan.data(), src_scan.data(), width,
+                                 clip_scan.data(), 4);
       } else {
-        CompositeRow_AlphaToMask(dest_scan, src_extra_alpha.data(), width,
-                                 clip_scan, 1);
+        CompositeRow_AlphaToMask(dest_scan.data(), src_extra_alpha.data(),
+                                 width, clip_scan.data(), 1);
       }
     } else {
-      CompositeRow_Rgb2Mask(dest_scan, src_scan.data(), width, clip_scan);
+      CompositeRow_Rgb2Mask(dest_scan.data(), src_scan.data(), width,
+                            clip_scan.data());
     }
   } else if (GetBppFromFormat(m_DestFormat) == 8) {
     if (GetIsAlphaFromFormat(m_SrcFormat)) {
       if (GetIsAlphaFromFormat(m_DestFormat)) {
-        CompositeRow_Argb2Graya(dest_scan, src_scan.data(), width, m_BlendType,
-                                clip_scan, src_extra_alpha.data(),
-                                dst_extra_alpha.data());
+        CompositeRow_Argb2Graya(dest_scan.data(), src_scan.data(), width,
+                                m_BlendType, clip_scan.data(),
+                                src_extra_alpha.data(), dst_extra_alpha.data());
       } else {
-        CompositeRow_Argb2Gray(dest_scan, src_scan.data(), width, m_BlendType,
-                               clip_scan, src_extra_alpha.data());
+        CompositeRow_Argb2Gray(dest_scan.data(), src_scan.data(), width,
+                               m_BlendType, clip_scan.data(),
+                               src_extra_alpha.data());
       }
     } else {
       if (GetIsAlphaFromFormat(m_DestFormat)) {
-        CompositeRow_Rgb2Graya(dest_scan, src_scan.data(), src_Bpp, width,
-                               m_BlendType, clip_scan, dst_extra_alpha.data());
+        CompositeRow_Rgb2Graya(dest_scan.data(), src_scan.data(), src_Bpp,
+                               width, m_BlendType, clip_scan.data(),
+                               dst_extra_alpha.data());
       } else {
-        CompositeRow_Rgb2Gray(dest_scan, src_scan.data(), src_Bpp, width,
-                              m_BlendType, clip_scan);
+        CompositeRow_Rgb2Gray(dest_scan.data(), src_scan.data(), src_Bpp, width,
+                              m_BlendType, clip_scan.data());
       }
     }
   } else {
@@ -2873,68 +2882,71 @@
       case 4:
       case 8:
       case 4 + 8: {
-        CompositeRow_Argb2Argb(dest_scan, src_scan.data(), width, m_BlendType,
-                               clip_scan, dst_extra_alpha.data(),
-                               src_extra_alpha.data());
+        CompositeRow_Argb2Argb(dest_scan.data(), src_scan.data(), width,
+                               m_BlendType, clip_scan.data(),
+                               dst_extra_alpha.data(), src_extra_alpha.data());
       } break;
       case 1:
-        CompositeRow_Rgb2Argb_Blend_NoClip(dest_scan, src_scan.data(), width,
-                                           m_BlendType, src_Bpp,
+        CompositeRow_Rgb2Argb_Blend_NoClip(dest_scan.data(), src_scan.data(),
+                                           width, m_BlendType, src_Bpp,
                                            dst_extra_alpha.data());
         break;
       case 1 + 8:
-        CompositeRow_Rgb2Argb_Blend_Clip(dest_scan, src_scan.data(), width,
-                                         m_BlendType, src_Bpp, clip_scan,
-                                         dst_extra_alpha.data());
+        CompositeRow_Rgb2Argb_Blend_Clip(
+            dest_scan.data(), src_scan.data(), width, m_BlendType, src_Bpp,
+            clip_scan.data(), dst_extra_alpha.data());
         break;
       case 1 + 4:
-        CompositeRow_Rgb2Argb_NoBlend_NoClip(dest_scan, src_scan.data(), width,
-                                             src_Bpp, dst_extra_alpha.data());
+        CompositeRow_Rgb2Argb_NoBlend_NoClip(dest_scan.data(), src_scan.data(),
+                                             width, src_Bpp,
+                                             dst_extra_alpha.data());
         break;
       case 1 + 4 + 8:
-        CompositeRow_Rgb2Argb_NoBlend_Clip(dest_scan, src_scan.data(), width,
-                                           src_Bpp, clip_scan,
+        CompositeRow_Rgb2Argb_NoBlend_Clip(dest_scan.data(), src_scan.data(),
+                                           width, src_Bpp, clip_scan.data(),
                                            dst_extra_alpha.data());
         break;
       case 2:
       case 2 + 8:
-        CompositeRow_Argb2Rgb_Blend(dest_scan, src_scan.data(), width,
-                                    m_BlendType, dest_Bpp, clip_scan,
+        CompositeRow_Argb2Rgb_Blend(dest_scan.data(), src_scan.data(), width,
+                                    m_BlendType, dest_Bpp, clip_scan.data(),
                                     src_extra_alpha.data());
         break;
       case 2 + 4:
       case 2 + 4 + 8:
-        CompositeRow_Argb2Rgb_NoBlend(dest_scan, src_scan.data(), width,
-                                      dest_Bpp, clip_scan,
+        CompositeRow_Argb2Rgb_NoBlend(dest_scan.data(), src_scan.data(), width,
+                                      dest_Bpp, clip_scan.data(),
                                       src_extra_alpha.data());
         break;
       case 1 + 2:
-        CompositeRow_Rgb2Rgb_Blend_NoClip(dest_scan, src_scan.data(), width,
-                                          m_BlendType, dest_Bpp, src_Bpp);
+        CompositeRow_Rgb2Rgb_Blend_NoClip(dest_scan.data(), src_scan.data(),
+                                          width, m_BlendType, dest_Bpp,
+                                          src_Bpp);
         break;
       case 1 + 2 + 8:
-        CompositeRow_Rgb2Rgb_Blend_Clip(dest_scan, src_scan.data(), width,
-                                        m_BlendType, dest_Bpp, src_Bpp,
-                                        clip_scan);
+        CompositeRow_Rgb2Rgb_Blend_Clip(dest_scan.data(), src_scan.data(),
+                                        width, m_BlendType, dest_Bpp, src_Bpp,
+                                        clip_scan.data());
         break;
       case 1 + 2 + 4:
-        CompositeRow_Rgb2Rgb_NoBlend_NoClip(dest_scan, src_scan.data(), width,
-                                            dest_Bpp, src_Bpp);
+        CompositeRow_Rgb2Rgb_NoBlend_NoClip(dest_scan.data(), src_scan.data(),
+                                            width, dest_Bpp, src_Bpp);
         break;
       case 1 + 2 + 4 + 8:
-        CompositeRow_Rgb2Rgb_NoBlend_Clip(dest_scan, src_scan.data(), width,
-                                          dest_Bpp, src_Bpp, clip_scan);
+        CompositeRow_Rgb2Rgb_NoBlend_Clip(dest_scan.data(), src_scan.data(),
+                                          width, dest_Bpp, src_Bpp,
+                                          clip_scan.data());
         break;
     }
   }
 }
 
 void CFX_ScanlineCompositor::CompositePalBitmapLine(
-    uint8_t* dest_scan,
+    pdfium::span<uint8_t> dest_scan,
     pdfium::span<const uint8_t> src_scan,
     int src_left,
     int width,
-    const uint8_t* clip_scan,
+    pdfium::span<const uint8_t> clip_scan,
     pdfium::span<const uint8_t> src_extra_alpha,
     pdfium::span<uint8_t> dst_extra_alpha) {
   if (m_bRgbByteOrder) {
@@ -2944,13 +2956,13 @@
       }
       if (m_DestFormat == FXDIB_Format::kArgb) {
         CompositeRow_1bppRgb2Argb_NoBlend_RgbByteOrder(
-            dest_scan, src_scan.data(), src_left, width,
-            m_SrcPalette.Get32BitPalette(), clip_scan);
+            dest_scan.data(), src_scan.data(), src_left, width,
+            m_SrcPalette.Get32BitPalette(), clip_scan.data());
       } else {
         CompositeRow_1bppRgb2Rgb_NoBlend_RgbByteOrder(
-            dest_scan, src_scan.data(), src_left,
+            dest_scan.data(), src_scan.data(), src_left,
             m_SrcPalette.Get32BitPalette(), width,
-            GetCompsFromFormat(m_DestFormat), clip_scan);
+            GetCompsFromFormat(m_DestFormat), clip_scan.data());
       }
     } else {
       if (m_DestFormat == FXDIB_Format::k8bppRgb) {
@@ -2958,164 +2970,173 @@
       }
       if (m_DestFormat == FXDIB_Format::kArgb) {
         CompositeRow_8bppRgb2Argb_NoBlend_RgbByteOrder(
-            dest_scan, src_scan.data(), width,
-            m_SrcPalette.Get32BitPalette().data(), clip_scan);
+            dest_scan.data(), src_scan.data(), width,
+            m_SrcPalette.Get32BitPalette().data(), clip_scan.data());
       } else {
         CompositeRow_8bppRgb2Rgb_NoBlend_RgbByteOrder(
-            dest_scan, src_scan.data(), m_SrcPalette.Get32BitPalette().data(),
-            width, GetCompsFromFormat(m_DestFormat), clip_scan);
+            dest_scan.data(), src_scan.data(),
+            m_SrcPalette.Get32BitPalette().data(), width,
+            GetCompsFromFormat(m_DestFormat), clip_scan.data());
       }
     }
     return;
   }
   if (m_DestFormat == FXDIB_Format::k8bppMask) {
-    CompositeRow_Rgb2Mask(dest_scan, src_scan.data(), width, clip_scan);
+    CompositeRow_Rgb2Mask(dest_scan.data(), src_scan.data(), width,
+                          clip_scan.data());
     return;
   }
   if (GetBppFromFormat(m_DestFormat) == 8) {
     if (m_iTransparency & 8) {
       if (GetIsAlphaFromFormat(m_DestFormat)) {
-        CompositeRow_1bppPal2Graya(
-            dest_scan, src_scan.data(), src_left, m_SrcPalette.Get8BitPalette(),
-            width, m_BlendType, clip_scan, dst_extra_alpha.data());
+        CompositeRow_1bppPal2Graya(dest_scan.data(), src_scan.data(), src_left,
+                                   m_SrcPalette.Get8BitPalette(), width,
+                                   m_BlendType, clip_scan.data(),
+                                   dst_extra_alpha.data());
       } else {
-        CompositeRow_1bppPal2Gray(dest_scan, src_scan.data(), src_left,
+        CompositeRow_1bppPal2Gray(dest_scan.data(), src_scan.data(), src_left,
                                   m_SrcPalette.Get8BitPalette(), width,
-                                  m_BlendType, clip_scan);
+                                  m_BlendType, clip_scan.data());
       }
     } else {
       if (GetIsAlphaFromFormat(m_DestFormat)) {
         CompositeRow_8bppPal2Graya(
-            dest_scan, src_scan.data(), m_SrcPalette.Get8BitPalette().data(),
-            width, m_BlendType, clip_scan, dst_extra_alpha.data(),
-            src_extra_alpha.data());
+            dest_scan.data(), src_scan.data(),
+            m_SrcPalette.Get8BitPalette().data(), width, m_BlendType,
+            clip_scan.data(), dst_extra_alpha.data(), src_extra_alpha.data());
       } else {
-        CompositeRow_8bppPal2Gray(
-            dest_scan, src_scan.data(), m_SrcPalette.Get8BitPalette().data(),
-            width, m_BlendType, clip_scan, src_extra_alpha.data());
+        CompositeRow_8bppPal2Gray(dest_scan.data(), src_scan.data(),
+                                  m_SrcPalette.Get8BitPalette().data(), width,
+                                  m_BlendType, clip_scan.data(),
+                                  src_extra_alpha.data());
       }
     }
   } else {
     switch (m_iTransparency) {
       case 1 + 2:
-        CompositeRow_8bppRgb2Argb_NoBlend(dest_scan, src_scan.data(), width,
-                                          m_SrcPalette.Get32BitPalette().data(),
-                                          clip_scan, src_extra_alpha.data());
+        CompositeRow_8bppRgb2Argb_NoBlend(
+            dest_scan.data(), src_scan.data(), width,
+            m_SrcPalette.Get32BitPalette().data(), clip_scan.data(),
+            src_extra_alpha.data());
         break;
       case 1 + 2 + 8:
-        CompositeRow_1bppRgb2Argb_NoBlend(dest_scan, src_scan.data(), src_left,
-                                          width, m_SrcPalette.Get32BitPalette(),
-                                          clip_scan);
+        CompositeRow_1bppRgb2Argb_NoBlend(
+            dest_scan.data(), src_scan.data(), src_left, width,
+            m_SrcPalette.Get32BitPalette(), clip_scan.data());
         break;
       case 0:
         CompositeRow_8bppRgb2Rgb_NoBlend(
-            dest_scan, src_scan.data(), m_SrcPalette.Get32BitPalette().data(),
-            width, GetCompsFromFormat(m_DestFormat), clip_scan,
+            dest_scan.data(), src_scan.data(),
+            m_SrcPalette.Get32BitPalette().data(), width,
+            GetCompsFromFormat(m_DestFormat), clip_scan.data(),
             src_extra_alpha.data());
         break;
       case 0 + 8:
-        CompositeRow_1bppRgb2Rgb_NoBlend(dest_scan, src_scan.data(), src_left,
-                                         m_SrcPalette.Get32BitPalette(), width,
-                                         GetCompsFromFormat(m_DestFormat),
-                                         clip_scan);
+        CompositeRow_1bppRgb2Rgb_NoBlend(
+            dest_scan.data(), src_scan.data(), src_left,
+            m_SrcPalette.Get32BitPalette(), width,
+            GetCompsFromFormat(m_DestFormat), clip_scan.data());
         break;
       case 0 + 2:
         CompositeRow_8bppRgb2Rgb_NoBlend(
-            dest_scan, src_scan.data(), m_SrcPalette.Get32BitPalette().data(),
-            width, GetCompsFromFormat(m_DestFormat), clip_scan,
+            dest_scan.data(), src_scan.data(),
+            m_SrcPalette.Get32BitPalette().data(), width,
+            GetCompsFromFormat(m_DestFormat), clip_scan.data(),
             src_extra_alpha.data());
         break;
       case 0 + 2 + 8:
-        CompositeRow_1bppRgb2Rgba_NoBlend(dest_scan, src_scan.data(), src_left,
-                                          width, m_SrcPalette.Get32BitPalette(),
-                                          clip_scan, dst_extra_alpha.data());
+        CompositeRow_1bppRgb2Rgba_NoBlend(
+            dest_scan.data(), src_scan.data(), src_left, width,
+            m_SrcPalette.Get32BitPalette(), clip_scan.data(),
+            dst_extra_alpha.data());
         break;
     }
   }
 }
 
 void CFX_ScanlineCompositor::CompositeByteMaskLine(
-    uint8_t* dest_scan,
+    pdfium::span<uint8_t> dest_scan,
     pdfium::span<const uint8_t> src_scan,
     int width,
-    const uint8_t* clip_scan,
+    pdfium::span<const uint8_t> clip_scan,
     pdfium::span<uint8_t> dst_extra_alpha) {
   if (m_DestFormat == FXDIB_Format::k8bppMask) {
-    CompositeRow_ByteMask2Mask(dest_scan, src_scan.data(), m_MaskAlpha, width,
-                               clip_scan);
+    CompositeRow_ByteMask2Mask(dest_scan.data(), src_scan.data(), m_MaskAlpha,
+                               width, clip_scan.data());
   } else if (GetBppFromFormat(m_DestFormat) == 8) {
     if (GetIsAlphaFromFormat(m_DestFormat)) {
-      CompositeRow_ByteMask2Graya(dest_scan, src_scan.data(), m_MaskAlpha,
-                                  m_MaskRed, width, clip_scan,
-                                  dst_extra_alpha.data());
+      CompositeRow_ByteMask2Graya(dest_scan.data(), src_scan.data(),
+                                  m_MaskAlpha, m_MaskRed, width,
+                                  clip_scan.data(), dst_extra_alpha.data());
     } else {
-      CompositeRow_ByteMask2Gray(dest_scan, src_scan.data(), m_MaskAlpha,
-                                 m_MaskRed, width, clip_scan);
+      CompositeRow_ByteMask2Gray(dest_scan.data(), src_scan.data(), m_MaskAlpha,
+                                 m_MaskRed, width, clip_scan.data());
     }
   } else if (m_bRgbByteOrder) {
     if (m_DestFormat == FXDIB_Format::kArgb) {
       CompositeRow_ByteMask2Argb_RgbByteOrder(
-          dest_scan, src_scan.data(), m_MaskAlpha, m_MaskRed, m_MaskGreen,
-          m_MaskBlue, width, m_BlendType, clip_scan);
+          dest_scan.data(), src_scan.data(), m_MaskAlpha, m_MaskRed,
+          m_MaskGreen, m_MaskBlue, width, m_BlendType, clip_scan.data());
     } else {
       CompositeRow_ByteMask2Rgb_RgbByteOrder(
-          dest_scan, src_scan.data(), m_MaskAlpha, m_MaskRed, m_MaskGreen,
-          m_MaskBlue, width, m_BlendType, GetCompsFromFormat(m_DestFormat),
-          clip_scan);
+          dest_scan.data(), src_scan.data(), m_MaskAlpha, m_MaskRed,
+          m_MaskGreen, m_MaskBlue, width, m_BlendType,
+          GetCompsFromFormat(m_DestFormat), clip_scan.data());
     }
   } else if (m_DestFormat == FXDIB_Format::kArgb) {
-    CompositeRow_ByteMask2Argb(dest_scan, src_scan.data(), m_MaskAlpha,
+    CompositeRow_ByteMask2Argb(dest_scan.data(), src_scan.data(), m_MaskAlpha,
                                m_MaskRed, m_MaskGreen, m_MaskBlue, width,
-                               m_BlendType, clip_scan);
+                               m_BlendType, clip_scan.data());
   } else if (m_DestFormat == FXDIB_Format::kRgb ||
              m_DestFormat == FXDIB_Format::kRgb32) {
-    CompositeRow_ByteMask2Rgb(dest_scan, src_scan.data(), m_MaskAlpha,
+    CompositeRow_ByteMask2Rgb(dest_scan.data(), src_scan.data(), m_MaskAlpha,
                               m_MaskRed, m_MaskGreen, m_MaskBlue, width,
                               m_BlendType, GetCompsFromFormat(m_DestFormat),
-                              clip_scan);
+                              clip_scan.data());
   }
 }
 
 void CFX_ScanlineCompositor::CompositeBitMaskLine(
-    uint8_t* dest_scan,
+    pdfium::span<uint8_t> dest_scan,
     pdfium::span<const uint8_t> src_scan,
     int src_left,
     int width,
-    const uint8_t* clip_scan,
+    pdfium::span<const uint8_t> clip_scan,
     pdfium::span<uint8_t> dst_extra_alpha) {
   if (m_DestFormat == FXDIB_Format::k8bppMask) {
-    CompositeRow_BitMask2Mask(dest_scan, src_scan.data(), m_MaskAlpha, src_left,
-                              width, clip_scan);
+    CompositeRow_BitMask2Mask(dest_scan.data(), src_scan.data(), m_MaskAlpha,
+                              src_left, width, clip_scan.data());
   } else if (GetBppFromFormat(m_DestFormat) == 8) {
     if (GetIsAlphaFromFormat(m_DestFormat)) {
-      CompositeRow_BitMask2Graya(dest_scan, src_scan.data(), m_MaskAlpha,
-                                 m_MaskRed, src_left, width, clip_scan,
+      CompositeRow_BitMask2Graya(dest_scan.data(), src_scan.data(), m_MaskAlpha,
+                                 m_MaskRed, src_left, width, clip_scan.data(),
                                  dst_extra_alpha.data());
     } else {
-      CompositeRow_BitMask2Gray(dest_scan, src_scan.data(), m_MaskAlpha,
-                                m_MaskRed, src_left, width, clip_scan);
+      CompositeRow_BitMask2Gray(dest_scan.data(), src_scan.data(), m_MaskAlpha,
+                                m_MaskRed, src_left, width, clip_scan.data());
     }
   } else if (m_bRgbByteOrder) {
     if (m_DestFormat == FXDIB_Format::kArgb) {
       CompositeRow_BitMask2Argb_RgbByteOrder(
-          dest_scan, src_scan.data(), m_MaskAlpha, m_MaskRed, m_MaskGreen,
-          m_MaskBlue, src_left, width, m_BlendType, clip_scan);
+          dest_scan.data(), src_scan.data(), m_MaskAlpha, m_MaskRed,
+          m_MaskGreen, m_MaskBlue, src_left, width, m_BlendType,
+          clip_scan.data());
     } else {
       CompositeRow_BitMask2Rgb_RgbByteOrder(
-          dest_scan, src_scan.data(), m_MaskAlpha, m_MaskRed, m_MaskGreen,
-          m_MaskBlue, src_left, width, m_BlendType,
-          GetCompsFromFormat(m_DestFormat), clip_scan);
+          dest_scan.data(), src_scan.data(), m_MaskAlpha, m_MaskRed,
+          m_MaskGreen, m_MaskBlue, src_left, width, m_BlendType,
+          GetCompsFromFormat(m_DestFormat), clip_scan.data());
     }
   } else if (m_DestFormat == FXDIB_Format::kArgb) {
-    CompositeRow_BitMask2Argb(dest_scan, src_scan.data(), m_MaskAlpha,
+    CompositeRow_BitMask2Argb(dest_scan.data(), src_scan.data(), m_MaskAlpha,
                               m_MaskRed, m_MaskGreen, m_MaskBlue, src_left,
-                              width, m_BlendType, clip_scan);
+                              width, m_BlendType, clip_scan.data());
   } else if (m_DestFormat == FXDIB_Format::kRgb ||
              m_DestFormat == FXDIB_Format::kRgb32) {
-    CompositeRow_BitMask2Rgb(dest_scan, src_scan.data(), m_MaskAlpha, m_MaskRed,
-                             m_MaskGreen, m_MaskBlue, src_left, width,
-                             m_BlendType, GetCompsFromFormat(m_DestFormat),
-                             clip_scan);
+    CompositeRow_BitMask2Rgb(
+        dest_scan.data(), src_scan.data(), m_MaskAlpha, m_MaskRed, m_MaskGreen,
+        m_MaskBlue, src_left, width, m_BlendType,
+        GetCompsFromFormat(m_DestFormat), clip_scan.data());
   }
 }
 
diff --git a/core/fxge/dib/cfx_scanlinecompositor.h b/core/fxge/dib/cfx_scanlinecompositor.h
index 0017f1c..73a54f3 100644
--- a/core/fxge/dib/cfx_scanlinecompositor.h
+++ b/core/fxge/dib/cfx_scanlinecompositor.h
@@ -27,32 +27,32 @@
             bool bClip,
             bool bRgbByteOrder);
 
-  void CompositeRgbBitmapLine(uint8_t* dest_scan,
+  void CompositeRgbBitmapLine(pdfium::span<uint8_t> dest_scan,
                               pdfium::span<const uint8_t> src_scan,
                               int width,
-                              const uint8_t* clip_scan,
+                              pdfium::span<const uint8_t> clip_scan,
                               pdfium::span<const uint8_t> src_extra_alpha,
                               pdfium::span<uint8_t> dst_extra_alpha);
 
-  void CompositePalBitmapLine(uint8_t* dest_scan,
+  void CompositePalBitmapLine(pdfium::span<uint8_t> dest_scan,
                               pdfium::span<const uint8_t> src_scan,
                               int src_left,
                               int width,
-                              const uint8_t* clip_scan,
+                              pdfium::span<const uint8_t> clip_scan,
                               pdfium::span<const uint8_t> src_extra_alpha,
                               pdfium::span<uint8_t> dst_extra_alpha);
 
-  void CompositeByteMaskLine(uint8_t* dest_scan,
+  void CompositeByteMaskLine(pdfium::span<uint8_t> dest_scan,
                              pdfium::span<const uint8_t> src_scan,
                              int width,
-                             const uint8_t* clip_scan,
+                             pdfium::span<const uint8_t> clip_scan,
                              pdfium::span<uint8_t> dst_extra_alpha);
 
-  void CompositeBitMaskLine(uint8_t* dest_scan,
+  void CompositeBitMaskLine(pdfium::span<uint8_t> dest_scan,
                             pdfium::span<const uint8_t> src_scan,
                             int src_left,
                             int width,
-                            const uint8_t* clip_scan,
+                            pdfium::span<const uint8_t> clip_scan,
                             pdfium::span<uint8_t> dst_extra_alpha);
 
  private: