diff --git a/core/fxcodec/basic/basicmodule.cpp b/core/fxcodec/basic/basicmodule.cpp
index 482eadc..b3abc99 100644
--- a/core/fxcodec/basic/basicmodule.cpp
+++ b/core/fxcodec/basic/basicmodule.cpp
@@ -6,6 +6,7 @@
 
 #include <algorithm>
 #include <utility>
+#include <vector>
 
 #include "core/fxcodec/scanlinedecoder.h"
 #include "core/fxcrt/fx_safe_types.h"
@@ -36,7 +37,7 @@
   void GetNextOperator();
   void UpdateOperator(uint8_t used_bytes);
 
-  std::unique_ptr<uint8_t, FxFreeDeleter> m_pScanline;
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> m_Scanline;
   pdfium::span<const uint8_t> m_SrcBuf;
   size_t m_dwLineBytes = 0;
   size_t m_SrcOffset = 0;
@@ -101,12 +102,12 @@
   m_Pitch = pitch.ValueOrDie();
   // Overflow should already have been checked before this is called.
   m_dwLineBytes = (static_cast<uint32_t>(width) * nComps * bpc + 7) / 8;
-  m_pScanline.reset(FX_Alloc(uint8_t, m_Pitch));
+  m_Scanline.resize(m_Pitch);
   return CheckDestSize();
 }
 
 bool RLScanlineDecoder::v_Rewind() {
-  memset(m_pScanline.get(), 0, m_Pitch);
+  memset(m_Scanline.data(), 0, m_Pitch);
   m_SrcOffset = 0;
   m_bEOD = false;
   m_Operator = 0;
@@ -119,7 +120,7 @@
   } else if (m_bEOD) {
     return nullptr;
   }
-  memset(m_pScanline.get(), 0, m_Pitch);
+  memset(m_Scanline.data(), 0, m_Pitch);
   uint32_t col_pos = 0;
   bool eol = false;
   while (m_SrcOffset < m_SrcBuf.size() && !eol) {
@@ -134,7 +135,7 @@
         m_bEOD = true;
       }
       auto copy_span = m_SrcBuf.subspan(m_SrcOffset, copy_len);
-      memcpy(m_pScanline.get() + col_pos, copy_span.data(), copy_span.size());
+      memcpy(m_Scanline.data() + col_pos, copy_span.data(), copy_span.size());
       col_pos += copy_len;
       UpdateOperator((uint8_t)copy_len);
     } else if (m_Operator > 128) {
@@ -147,7 +148,7 @@
         duplicate_len = m_dwLineBytes - col_pos;
         eol = true;
       }
-      memset(m_pScanline.get() + col_pos, fill, duplicate_len);
+      memset(m_Scanline.data() + col_pos, fill, duplicate_len);
       col_pos += duplicate_len;
       UpdateOperator((uint8_t)duplicate_len);
     } else {
@@ -155,7 +156,7 @@
       break;
     }
   }
-  return m_pScanline.get();
+  return m_Scanline.data();
 }
 
 void RLScanlineDecoder::GetNextOperator() {
