diff --git a/core/fxcodec/bmp/cfx_bmpdecompressor.h b/core/fxcodec/bmp/cfx_bmpdecompressor.h
index 3f4e2d8..98429b3 100644
--- a/core/fxcodec/bmp/cfx_bmpdecompressor.h
+++ b/core/fxcodec/bmp/cfx_bmpdecompressor.h
@@ -11,6 +11,7 @@
 
 #include "core/fxcodec/bmp/bmpmodule.h"
 #include "core/fxcodec/bmp/fx_bmp.h"
+#include "core/fxcrt/fx_memory_wrappers.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxcrt/unowned_ptr.h"
 
@@ -65,7 +66,7 @@
   bool SetHeight(int32_t signed_height);
 
   UnownedPtr<CFX_BmpContext> const context_;
-  std::vector<uint8_t> out_row_buffer_;
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> out_row_buffer_;
   std::vector<uint32_t> palette_;
   uint32_t header_offset_ = 0;
   uint32_t width_ = 0;
diff --git a/core/fxcodec/gif/cfx_gifcontext_unittest.cpp b/core/fxcodec/gif/cfx_gifcontext_unittest.cpp
index 20d34ea..818e8b9 100644
--- a/core/fxcodec/gif/cfx_gifcontext_unittest.cpp
+++ b/core/fxcodec/gif/cfx_gifcontext_unittest.cpp
@@ -47,7 +47,7 @@
 }
 
 TEST(CFX_GifContext, ReadAllOrNone) {
-  std::vector<uint8_t> dest_buffer;
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> dest_buffer;
   uint8_t src_buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04,
                           0x05, 0x06, 0x07, 0x08, 0x09};
   CFX_GifContextForTest context(nullptr, nullptr);
diff --git a/core/fxcodec/gif/cfx_lzwdecompressor.h b/core/fxcodec/gif/cfx_lzwdecompressor.h
index d3ec588..60c9388 100644
--- a/core/fxcodec/gif/cfx_lzwdecompressor.h
+++ b/core/fxcodec/gif/cfx_lzwdecompressor.h
@@ -34,7 +34,9 @@
     return ExtractData(dest_buf, dest_size);
   }
 
-  std::vector<uint8_t>* DecompressedForTest() { return &decompressed_; }
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>>* DecompressedForTest() {
+    return &decompressed_;
+  }
   size_t* DecompressedNextForTest() { return &decompressed_next_; }
 
  private:
@@ -51,7 +53,7 @@
   uint16_t code_end_;
   uint16_t code_next_;
   uint8_t code_first_;
-  std::vector<uint8_t> decompressed_;
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> decompressed_;
   size_t decompressed_next_;
   uint16_t code_old_;
   const uint8_t* next_in_;
diff --git a/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp b/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp
index e31fb78..58cb086 100644
--- a/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp
+++ b/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp
@@ -21,7 +21,8 @@
 
   // Check that 0 length extract does nothing
   {
-    std::vector<uint8_t>* decompressed = decompressor->DecompressedForTest();
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>>* decompressed =
+        decompressor->DecompressedForTest();
     *decompressed = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
     *(decompressor->DecompressedNextForTest()) = decompressed->size();
     uint8_t dest_buf[20];
@@ -38,7 +39,8 @@
 
   // Check that less than decompressed size only gets the expected number
   {
-    std::vector<uint8_t>* decompressed = decompressor->DecompressedForTest();
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>>* decompressed =
+        decompressor->DecompressedForTest();
     *decompressed = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
     *(decompressor->DecompressedNextForTest()) = decompressed->size();
     uint8_t dest_buf[20];
@@ -58,7 +60,8 @@
 
   // Check that greater than decompressed size depletes the decompressor
   {
-    std::vector<uint8_t>* decompressed = decompressor->DecompressedForTest();
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>>* decompressed =
+        decompressor->DecompressedForTest();
     *decompressed = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
     *(decompressor->DecompressedNextForTest()) = decompressed->size();
     uint8_t dest_buf[20];
diff --git a/core/fxcodec/icc/iccmodule.cpp b/core/fxcodec/icc/iccmodule.cpp
index e9a8cd6..87654c5 100644
--- a/core/fxcodec/icc/iccmodule.cpp
+++ b/core/fxcodec/icc/iccmodule.cpp
@@ -10,6 +10,7 @@
 #include <memory>
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
 #include "third_party/base/ptr_util.h"
 #include "third_party/base/stl_util.h"
 
@@ -126,7 +127,8 @@
       inputs[i] = pSrcValues[i];
     cmsDoTransform(pTransform->transform(), inputs.data(), output, 1);
   } else {
-    std::vector<uint8_t> inputs(std::max(nSrcComponents, 16u));
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> inputs(
+        std::max(nSrcComponents, 16u));
     for (uint32_t i = 0; i < nSrcComponents; ++i) {
       inputs[i] =
           pdfium::clamp(static_cast<int>(pSrcValues[i] * 255.0f), 0, 255);
diff --git a/core/fxcodec/progressivedecoder.h b/core/fxcodec/progressivedecoder.h
index 1852fe9..0247604 100644
--- a/core/fxcodec/progressivedecoder.h
+++ b/core/fxcodec/progressivedecoder.h
@@ -112,7 +112,7 @@
 
     int m_DestMin;
     int m_ItemSize;
-    std::vector<uint8_t> m_pWeightTables;
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> m_pWeightTables;
   };
 
   class CFXCODEC_HorzTable {
@@ -127,7 +127,7 @@
     }
 
     int m_ItemSize;
-    std::vector<uint8_t> m_pWeightTables;
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> m_pWeightTables;
   };
 
   class CFXCODEC_VertTable {
@@ -141,7 +141,7 @@
                                             pixel * m_ItemSize);
     }
     int m_ItemSize;
-    std::vector<uint8_t> m_pWeightTables;
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> m_pWeightTables;
   };
 
 #ifdef PDF_ENABLE_XFA_PNG
