diff --git a/fxbarcode/cbc_datamatrix.cpp b/fxbarcode/cbc_datamatrix.cpp
index e8695d2..930f564 100644
--- a/fxbarcode/cbc_datamatrix.cpp
+++ b/fxbarcode/cbc_datamatrix.cpp
@@ -23,6 +23,7 @@
 
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
 #include "fxbarcode/datamatrix/BC_DataMatrixWriter.h"
 #include "third_party/base/ptr_util.h"
 
@@ -35,7 +36,7 @@
   int32_t width;
   int32_t height;
   auto* pWriter = GetDataMatrixWriter();
-  std::vector<uint8_t> data =
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
       pWriter->Encode(WideString(contents), &width, &height);
   return pWriter->RenderResult(data, width, height);
 }
diff --git a/fxbarcode/cbc_pdf417i.cpp b/fxbarcode/cbc_pdf417i.cpp
index f91f5c6..14883d7 100644
--- a/fxbarcode/cbc_pdf417i.cpp
+++ b/fxbarcode/cbc_pdf417i.cpp
@@ -23,6 +23,7 @@
 
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
 #include "fxbarcode/pdf417/BC_PDF417Writer.h"
 #include "third_party/base/ptr_util.h"
 
@@ -46,7 +47,8 @@
   int32_t width;
   int32_t height;
   auto* pWriter = GetPDF417Writer();
-  std::vector<uint8_t> data = pWriter->Encode(contents, &width, &height);
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+      pWriter->Encode(contents, &width, &height);
   return pWriter->RenderResult(data, width, height);
 }
 
diff --git a/fxbarcode/cbc_qrcode.cpp b/fxbarcode/cbc_qrcode.cpp
index 5e60fa3..60d3e44 100644
--- a/fxbarcode/cbc_qrcode.cpp
+++ b/fxbarcode/cbc_qrcode.cpp
@@ -23,6 +23,7 @@
 
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
 #include "fxbarcode/qrcode/BC_QRCodeWriter.h"
 #include "third_party/base/ptr_util.h"
 
@@ -35,7 +36,7 @@
   int32_t width;
   int32_t height;
   CBC_QRCodeWriter* pWriter = GetQRCodeWriter();
-  std::vector<uint8_t> data = pWriter->Encode(
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> data = pWriter->Encode(
       contents, pWriter->error_correction_level(), &width, &height);
   return pWriter->RenderResult(data, width, height);
 }
diff --git a/fxbarcode/common/BC_CommonByteMatrix.cpp b/fxbarcode/common/BC_CommonByteMatrix.cpp
index a05fde0..795593d 100644
--- a/fxbarcode/common/BC_CommonByteMatrix.cpp
+++ b/fxbarcode/common/BC_CommonByteMatrix.cpp
@@ -27,7 +27,8 @@
 
 CBC_CommonByteMatrix::CBC_CommonByteMatrix(int32_t width, int32_t height)
     : m_width(width), m_height(height) {
-  m_bytes = pdfium::Vector2D<uint8_t>(m_height, m_width);
+  m_bytes =
+      pdfium::Vector2D<uint8_t, FxAllocAllocator<uint8_t>>(m_height, m_width);
   clear(0xff);
 }
 
diff --git a/fxbarcode/common/BC_CommonByteMatrix.h b/fxbarcode/common/BC_CommonByteMatrix.h
index c5a66a3..c219aaa 100644
--- a/fxbarcode/common/BC_CommonByteMatrix.h
+++ b/fxbarcode/common/BC_CommonByteMatrix.h
@@ -11,6 +11,7 @@
 
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
 #include "core/fxcrt/fx_system.h"
 #include "third_party/base/span.h"
 
@@ -31,7 +32,7 @@
  private:
   int32_t m_width;
   int32_t m_height;
-  std::vector<uint8_t> m_bytes;
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> m_bytes;
 };
 
 #endif  // FXBARCODE_COMMON_BC_COMMONBYTEMATRIX_H_
diff --git a/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp b/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp
index 1d2b39e..16ec3a9 100644
--- a/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp
+++ b/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp
@@ -107,10 +107,11 @@
   return true;
 }
 
-std::vector<uint8_t> CBC_DataMatrixWriter::Encode(const WideString& contents,
-                                                  int32_t* pOutWidth,
-                                                  int32_t* pOutHeight) {
-  std::vector<uint8_t> results;
+std::vector<uint8_t, FxAllocAllocator<uint8_t>> CBC_DataMatrixWriter::Encode(
+    const WideString& contents,
+    int32_t* pOutWidth,
+    int32_t* pOutHeight) {
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> results;
   WideString encoded = CBC_HighLevelEncoder::EncodeHighLevel(contents);
   if (encoded.IsEmpty())
     return results;
@@ -139,7 +140,8 @@
 
   *pOutWidth = bytematrix->GetWidth();
   *pOutHeight = bytematrix->GetHeight();
-  results = pdfium::Vector2D<uint8_t>(*pOutWidth, *pOutHeight);
+  results = pdfium::Vector2D<uint8_t, FxAllocAllocator<uint8_t>>(*pOutWidth,
+                                                                 *pOutHeight);
   memcpy(results.data(), bytematrix->GetArray().data(),
          *pOutWidth * *pOutHeight);
   return results;
diff --git a/fxbarcode/datamatrix/BC_DataMatrixWriter.h b/fxbarcode/datamatrix/BC_DataMatrixWriter.h
index f95612e..473390e 100644
--- a/fxbarcode/datamatrix/BC_DataMatrixWriter.h
+++ b/fxbarcode/datamatrix/BC_DataMatrixWriter.h
@@ -9,6 +9,7 @@
 
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
 #include "fxbarcode/BC_TwoDimWriter.h"
 
 class CBC_DataMatrixWriter final : public CBC_TwoDimWriter {
@@ -16,9 +17,8 @@
   CBC_DataMatrixWriter();
   ~CBC_DataMatrixWriter() override;
 
-  std::vector<uint8_t> Encode(const WideString& contents,
-                              int32_t* pOutWidth,
-                              int32_t* pOutHeight);
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>>
+  Encode(const WideString& contents, int32_t* pOutWidth, int32_t* pOutHeight);
 
   // CBC_TwoDimWriter
   bool SetErrorCorrectionLevel(int32_t level) override;
diff --git a/fxbarcode/datamatrix/BC_DataMatrixWriter_unittest.cpp b/fxbarcode/datamatrix/BC_DataMatrixWriter_unittest.cpp
index fa5d26c..29924d8 100644
--- a/fxbarcode/datamatrix/BC_DataMatrixWriter_unittest.cpp
+++ b/fxbarcode/datamatrix/BC_DataMatrixWriter_unittest.cpp
@@ -40,7 +40,8 @@
         1, 1, 1, 1, 1, 1, 1, 1, 1, 1
     };
     // clang-format on
-    std::vector<uint8_t> data = writer.Encode(L"", &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(L"", &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedDimension, width);
     ASSERT_EQ(kExpectedDimension, height);
@@ -67,7 +68,8 @@
         1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
     };
     // clang-format on
-    std::vector<uint8_t> data = writer.Encode(L"helloworld", &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(L"helloworld", &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedDimension, width);
     ASSERT_EQ(kExpectedDimension, height);
@@ -90,7 +92,8 @@
         1, 1, 1, 1, 1, 1, 1, 1, 1, 1
     };
     // clang-format on
-    std::vector<uint8_t> data = writer.Encode(L"12345", &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(L"12345", &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedDimension, width);
     ASSERT_EQ(kExpectedDimension, height);
@@ -121,7 +124,7 @@
         1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
     };
     // clang-format on
-    std::vector<uint8_t> data =
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
         writer.Encode(L"abcdefghijklmnopqrst", &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedDimension, width);
@@ -130,7 +133,8 @@
       EXPECT_EQ(kExpectedData[i], data[i]) << i;
   }
   {
-    std::vector<uint8_t> data = writer.Encode(L"hello world", &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(L"hello world", &width, &height);
     ASSERT_TRUE(data.empty());
   }
 }
@@ -147,7 +151,8 @@
 
   {
     static constexpr int kExpectedDimension = 144;
-    std::vector<uint8_t> data = writer.Encode(input.c_str(), &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(input.c_str(), &width, &height);
     EXPECT_EQ(20736u, data.size());
     EXPECT_EQ(kExpectedDimension, width);
     EXPECT_EQ(kExpectedDimension, height);
@@ -158,7 +163,8 @@
   {
     width = -1;
     height = -1;
-    std::vector<uint8_t> data = writer.Encode(input.c_str(), &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(input.c_str(), &width, &height);
     EXPECT_EQ(0u, data.size());
     EXPECT_EQ(-1, width);
     EXPECT_EQ(-1, height);
@@ -177,7 +183,8 @@
 
   {
     static constexpr int kExpectedDimension = 144;
-    std::vector<uint8_t> data = writer.Encode(input.c_str(), &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(input.c_str(), &width, &height);
     EXPECT_EQ(20736u, data.size());
     EXPECT_EQ(kExpectedDimension, width);
     EXPECT_EQ(kExpectedDimension, height);
@@ -188,7 +195,8 @@
   {
     width = -1;
     height = -1;
-    std::vector<uint8_t> data = writer.Encode(input.c_str(), &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(input.c_str(), &width, &height);
     EXPECT_EQ(0u, data.size());
     EXPECT_EQ(-1, width);
     EXPECT_EQ(-1, height);
diff --git a/fxbarcode/datamatrix/BC_DefaultPlacement.cpp b/fxbarcode/datamatrix/BC_DefaultPlacement.cpp
index 24d81f1..aedd90c 100644
--- a/fxbarcode/datamatrix/BC_DefaultPlacement.cpp
+++ b/fxbarcode/datamatrix/BC_DefaultPlacement.cpp
@@ -46,7 +46,8 @@
 int32_t CBC_DefaultPlacement::getNumcols() {
   return m_numcols;
 }
-std::vector<uint8_t>& CBC_DefaultPlacement::getBits() {
+std::vector<uint8_t, FxAllocAllocator<uint8_t>>&
+CBC_DefaultPlacement::getBits() {
   return m_bits;
 }
 bool CBC_DefaultPlacement::getBit(int32_t col, int32_t row) {
diff --git a/fxbarcode/datamatrix/BC_DefaultPlacement.h b/fxbarcode/datamatrix/BC_DefaultPlacement.h
index 823d587..7c33aa3 100644
--- a/fxbarcode/datamatrix/BC_DefaultPlacement.h
+++ b/fxbarcode/datamatrix/BC_DefaultPlacement.h
@@ -9,6 +9,7 @@
 
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
 #include "core/fxcrt/fx_string.h"
 
 class CBC_DefaultPlacement final {
@@ -18,7 +19,7 @@
 
   int32_t getNumrows();
   int32_t getNumcols();
-  std::vector<uint8_t>& getBits();
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>>& getBits();
   bool getBit(int32_t col, int32_t row);
   void setBit(int32_t col, int32_t row, bool bit);
   bool hasBit(int32_t col, int32_t row);
@@ -28,7 +29,7 @@
   WideString m_codewords;
   int32_t m_numrows;
   int32_t m_numcols;
-  std::vector<uint8_t> m_bits;
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> m_bits;
   void module(int32_t row, int32_t col, int32_t pos, int32_t bit);
   void utah(int32_t row, int32_t col, int32_t pos);
   void corner1(int32_t pos);
diff --git a/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp b/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp
index 70e7cd9..e7cb1f1 100644
--- a/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp
+++ b/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp
@@ -33,10 +33,12 @@
 
 CBC_BarcodeMatrix::~CBC_BarcodeMatrix() {}
 
-std::vector<uint8_t> CBC_BarcodeMatrix::toBitArray() {
-  std::vector<uint8_t> bitArray(m_width * m_height);
+std::vector<uint8_t, FxAllocAllocator<uint8_t>>
+CBC_BarcodeMatrix::toBitArray() {
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> bitArray(m_width * m_height);
   for (size_t i = 0; i < m_height; ++i) {
-    std::vector<uint8_t>& bytearray = m_matrix[i]->getRow();
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>>& bytearray =
+        m_matrix[i]->getRow();
     for (size_t j = 0; j < m_width; ++j)
       bitArray[i * m_width + j] = bytearray[j];
   }
diff --git a/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h b/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h
index d059cee..cb88c62 100644
--- a/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h
+++ b/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h
@@ -10,6 +10,8 @@
 #include <memory>
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
+
 class CBC_BarcodeRow;
 
 class CBC_BarcodeMatrix final {
@@ -20,7 +22,7 @@
   CBC_BarcodeRow* getRow(size_t row) const { return m_matrix[row].get(); }
   size_t getWidth() const { return m_width; }
   size_t getHeight() const { return m_height; }
-  std::vector<uint8_t> toBitArray();
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> toBitArray();
 
  private:
   std::vector<std::unique_ptr<CBC_BarcodeRow>> m_matrix;
diff --git a/fxbarcode/pdf417/BC_PDF417BarcodeRow.cpp b/fxbarcode/pdf417/BC_PDF417BarcodeRow.cpp
index 65c27de..eb425a9 100644
--- a/fxbarcode/pdf417/BC_PDF417BarcodeRow.cpp
+++ b/fxbarcode/pdf417/BC_PDF417BarcodeRow.cpp
@@ -34,6 +34,6 @@
   m_currentLocation += width;
 }
 
-std::vector<uint8_t>& CBC_BarcodeRow::getRow() {
+std::vector<uint8_t, FxAllocAllocator<uint8_t>>& CBC_BarcodeRow::getRow() {
   return m_row;
 }
diff --git a/fxbarcode/pdf417/BC_PDF417BarcodeRow.h b/fxbarcode/pdf417/BC_PDF417BarcodeRow.h
index 07ebbd7..4b7b6f0 100644
--- a/fxbarcode/pdf417/BC_PDF417BarcodeRow.h
+++ b/fxbarcode/pdf417/BC_PDF417BarcodeRow.h
@@ -11,16 +11,18 @@
 
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
+
 class CBC_BarcodeRow final {
  public:
   explicit CBC_BarcodeRow(size_t width);
   ~CBC_BarcodeRow();
 
   void addBar(bool black, int32_t width);
-  std::vector<uint8_t>& getRow();
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>>& getRow();
 
  private:
-  std::vector<uint8_t> m_row;
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> m_row;
   int32_t m_currentLocation;
 };
 
diff --git a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
index 0570338..65eef10 100644
--- a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
+++ b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
@@ -89,7 +89,8 @@
 
     result += ch;
   }
-  std::vector<uint8_t> byteArr(bytes.begin(), bytes.end());
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> byteArr(bytes.begin(),
+                                                          bytes.end());
   len = result.GetLength();
   WideString sb;
   sb.Reserve(len);
@@ -354,7 +355,7 @@
 
 Optional<size_t> CBC_PDF417HighLevelEncoder::DetermineConsecutiveBinaryCount(
     WideString msg,
-    std::vector<uint8_t>* bytes,
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>>* bytes,
     size_t startpos) {
   size_t len = msg.GetLength();
   size_t idx = startpos;
diff --git a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h
index df1cd54..b6dd1b9 100644
--- a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h
+++ b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h
@@ -9,6 +9,7 @@
 
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
 #include "core/fxcrt/fx_string.h"
 #include "fxbarcode/pdf417/BC_PDF417.h"
 #include "third_party/base/optional.h"
@@ -44,7 +45,7 @@
   static size_t DetermineConsecutiveTextCount(WideString msg, size_t startpos);
   static Optional<size_t> DetermineConsecutiveBinaryCount(
       WideString msg,
-      std::vector<uint8_t>* bytes,
+      std::vector<uint8_t, FxAllocAllocator<uint8_t>>* bytes,
       size_t startpos);
 
   friend class PDF417HighLevelEncoderTest_ConsecutiveBinaryCount_Test;
diff --git a/fxbarcode/pdf417/BC_PDF417Writer.cpp b/fxbarcode/pdf417/BC_PDF417Writer.cpp
index f9f3624..4ef6b7e 100644
--- a/fxbarcode/pdf417/BC_PDF417Writer.cpp
+++ b/fxbarcode/pdf417/BC_PDF417Writer.cpp
@@ -43,10 +43,11 @@
   return true;
 }
 
-std::vector<uint8_t> CBC_PDF417Writer::Encode(WideStringView contents,
-                                              int32_t* pOutWidth,
-                                              int32_t* pOutHeight) {
-  std::vector<uint8_t> results;
+std::vector<uint8_t, FxAllocAllocator<uint8_t>> CBC_PDF417Writer::Encode(
+    WideStringView contents,
+    int32_t* pOutWidth,
+    int32_t* pOutHeight) {
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> results;
   CBC_PDF417 encoder;
   int32_t col = (m_Width / m_ModuleWidth - 69) / 17;
   int32_t row = m_Height / (m_ModuleWidth * 20);
@@ -60,7 +61,8 @@
     return results;
 
   CBC_BarcodeMatrix* barcodeMatrix = encoder.getBarcodeMatrix();
-  std::vector<uint8_t> matrixData = barcodeMatrix->toBitArray();
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> matrixData =
+      barcodeMatrix->toBitArray();
   int32_t matrixWidth = barcodeMatrix->getWidth();
   int32_t matrixHeight = barcodeMatrix->getHeight();
 
@@ -70,15 +72,17 @@
   }
   *pOutWidth = matrixWidth;
   *pOutHeight = matrixHeight;
-  results = pdfium::Vector2D<uint8_t>(*pOutWidth, *pOutHeight);
+  results = pdfium::Vector2D<uint8_t, FxAllocAllocator<uint8_t>>(*pOutWidth,
+                                                                 *pOutHeight);
   memcpy(results.data(), matrixData.data(), *pOutWidth * *pOutHeight);
   return results;
 }
 
-void CBC_PDF417Writer::RotateArray(std::vector<uint8_t>* bitarray,
-                                   int32_t height,
-                                   int32_t width) {
-  std::vector<uint8_t> temp = *bitarray;
+void CBC_PDF417Writer::RotateArray(
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>>* bitarray,
+    int32_t height,
+    int32_t width) {
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> temp = *bitarray;
   for (int32_t ii = 0; ii < height; ii++) {
     int32_t inverseii = height - ii - 1;
     for (int32_t jj = 0; jj < width; jj++) {
diff --git a/fxbarcode/pdf417/BC_PDF417Writer.h b/fxbarcode/pdf417/BC_PDF417Writer.h
index 10f069a..c7f75ef 100644
--- a/fxbarcode/pdf417/BC_PDF417Writer.h
+++ b/fxbarcode/pdf417/BC_PDF417Writer.h
@@ -9,6 +9,7 @@
 
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
 #include "fxbarcode/BC_TwoDimWriter.h"
@@ -18,15 +19,14 @@
   CBC_PDF417Writer();
   ~CBC_PDF417Writer() override;
 
-  std::vector<uint8_t> Encode(WideStringView contents,
-                              int32_t* pOutWidth,
-                              int32_t* pOutHeight);
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>>
+  Encode(WideStringView contents, int32_t* pOutWidth, int32_t* pOutHeight);
 
   // CBC_TwoDimWriter
   bool SetErrorCorrectionLevel(int32_t level) override;
 
  private:
-  void RotateArray(std::vector<uint8_t>* bitarray,
+  void RotateArray(std::vector<uint8_t, FxAllocAllocator<uint8_t>>* bitarray,
                    int32_t width,
                    int32_t height);
 };
diff --git a/fxbarcode/pdf417/BC_PDF417Writer_unittest.cpp b/fxbarcode/pdf417/BC_PDF417Writer_unittest.cpp
index 1c09d78..99ed6df 100644
--- a/fxbarcode/pdf417/BC_PDF417Writer_unittest.cpp
+++ b/fxbarcode/pdf417/BC_PDF417Writer_unittest.cpp
@@ -413,7 +413,8 @@
         1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1,
         0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
         1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1};
-    std::vector<uint8_t> data = writer.Encode(L"", &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(L"", &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedWidth, width);
     ASSERT_EQ(kExpectedHeight, height);
@@ -810,7 +811,8 @@
         1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0,
         0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
         1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1};
-    std::vector<uint8_t> data = writer.Encode(L"hello world", &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(L"hello world", &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedWidth, width);
     ASSERT_EQ(kExpectedHeight, height);
diff --git a/fxbarcode/qrcode/BC_QRCodeWriter.cpp b/fxbarcode/qrcode/BC_QRCodeWriter.cpp
index 1eead62..cae71bc 100644
--- a/fxbarcode/qrcode/BC_QRCodeWriter.cpp
+++ b/fxbarcode/qrcode/BC_QRCodeWriter.cpp
@@ -43,11 +43,12 @@
   return true;
 }
 
-std::vector<uint8_t> CBC_QRCodeWriter::Encode(WideStringView contents,
-                                              int32_t ecLevel,
-                                              int32_t* pOutWidth,
-                                              int32_t* pOutHeight) {
-  std::vector<uint8_t> results;
+std::vector<uint8_t, FxAllocAllocator<uint8_t>> CBC_QRCodeWriter::Encode(
+    WideStringView contents,
+    int32_t ecLevel,
+    int32_t* pOutWidth,
+    int32_t* pOutHeight) {
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> results;
   CBC_QRCoderErrorCorrectionLevel* ec = nullptr;
   switch (ecLevel) {
     case 0:
@@ -71,7 +72,8 @@
 
   *pOutWidth = qr.GetMatrixWidth();
   *pOutHeight = qr.GetMatrixWidth();
-  results = pdfium::Vector2D<uint8_t>(*pOutWidth, *pOutHeight);
+  results = pdfium::Vector2D<uint8_t, FxAllocAllocator<uint8_t>>(*pOutWidth,
+                                                                 *pOutHeight);
   memcpy(results.data(), qr.GetMatrix()->GetArray().data(),
          *pOutWidth * *pOutHeight);
   return results;
diff --git a/fxbarcode/qrcode/BC_QRCodeWriter.h b/fxbarcode/qrcode/BC_QRCodeWriter.h
index 3f2cca0..3031927 100644
--- a/fxbarcode/qrcode/BC_QRCodeWriter.h
+++ b/fxbarcode/qrcode/BC_QRCodeWriter.h
@@ -9,6 +9,7 @@
 
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
 #include "fxbarcode/BC_TwoDimWriter.h"
 
 class CBC_QRCodeWriter final : public CBC_TwoDimWriter {
@@ -16,10 +17,11 @@
   CBC_QRCodeWriter();
   ~CBC_QRCodeWriter() override;
 
-  std::vector<uint8_t> Encode(WideStringView contents,
-                              int32_t ecLevel,
-                              int32_t* pOutWidth,
-                              int32_t* pOutHeight);
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> Encode(
+      WideStringView contents,
+      int32_t ecLevel,
+      int32_t* pOutWidth,
+      int32_t* pOutHeight);
 
   // CBC_TwoDimWriter
   bool SetErrorCorrectionLevel(int32_t level) override;
diff --git a/fxbarcode/qrcode/BC_QRCodeWriter_unittest.cpp b/fxbarcode/qrcode/BC_QRCodeWriter_unittest.cpp
index 709d497..6edbc87 100644
--- a/fxbarcode/qrcode/BC_QRCodeWriter_unittest.cpp
+++ b/fxbarcode/qrcode/BC_QRCodeWriter_unittest.cpp
@@ -51,7 +51,8 @@
         1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1
     };
     // clang-format on
-    std::vector<uint8_t> data = writer.Encode(L"", 0, &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(L"", 0, &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedDimension, width);
     ASSERT_EQ(kExpectedDimension, height);
@@ -85,7 +86,8 @@
         1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1
     };
     // clang-format on
-    std::vector<uint8_t> data = writer.Encode(L"", 1, &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(L"", 1, &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedDimension, width);
     ASSERT_EQ(kExpectedDimension, height);
@@ -119,7 +121,8 @@
         1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0
     };
     // clang-format on
-    std::vector<uint8_t> data = writer.Encode(L"", 2, &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(L"", 2, &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedDimension, width);
     ASSERT_EQ(kExpectedDimension, height);
@@ -153,7 +156,8 @@
         1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0
     };
     // clang-format on
-    std::vector<uint8_t> data = writer.Encode(L"", 3, &width, &height);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
+        writer.Encode(L"", 3, &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedDimension, width);
     ASSERT_EQ(kExpectedDimension, height);
@@ -187,7 +191,7 @@
         1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0
     };
     // clang-format on
-    std::vector<uint8_t> data =
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
         writer.Encode(L"hello world", 0, &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedDimension, width);
@@ -222,7 +226,7 @@
         1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0
     };
     // clang-format on
-    std::vector<uint8_t> data =
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
         writer.Encode(L"hello world", 1, &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedDimension, width);
@@ -260,7 +264,7 @@
         0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0,
         1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1,
         1};
-    std::vector<uint8_t> data =
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
         writer.Encode(L"hello world", 2, &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedDimension, width);
@@ -298,7 +302,7 @@
         0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1,
         1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1,
         1};
-    std::vector<uint8_t> data =
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> data =
         writer.Encode(L"hello world", 3, &width, &height);
     ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedDimension, width);
diff --git a/fxbarcode/qrcode/BC_QRCoderBitVector.h b/fxbarcode/qrcode/BC_QRCoderBitVector.h
index 9b8af81..a0f29fe 100644
--- a/fxbarcode/qrcode/BC_QRCoderBitVector.h
+++ b/fxbarcode/qrcode/BC_QRCoderBitVector.h
@@ -12,6 +12,8 @@
 
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
+
 class CBC_QRCoderBitVector {
  public:
   CBC_QRCoderBitVector();
@@ -31,7 +33,7 @@
   void AppendByte(int8_t value);
 
   size_t m_sizeInBits = 0;
-  std::vector<uint8_t> m_array;
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> m_array;
 };
 
 #endif  // FXBARCODE_QRCODE_BC_QRCODERBITVECTOR_H_
diff --git a/fxbarcode/qrcode/BC_QRCoderEncoder.cpp b/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
index be02f5b..4cb6337 100644
--- a/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
+++ b/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
@@ -27,6 +27,7 @@
 #include <utility>
 #include <vector>
 
+#include "core/fxcrt/fx_memory_wrappers.h"
 #include "fxbarcode/common/BC_CommonByteMatrix.h"
 #include "fxbarcode/common/reedsolomon/BC_ReedSolomon.h"
 #include "fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h"
@@ -47,8 +48,8 @@
 CBC_ReedSolomonGF256* g_QRCodeField = nullptr;
 
 struct QRCoderBlockPair {
-  std::vector<uint8_t> data;
-  std::vector<uint8_t> ecc;
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> data;
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> ecc;
 };
 
 // This is a mapping for an ASCII table, starting at an index of 32.
@@ -140,7 +141,7 @@
 }
 
 bool AppendKanjiBytes(const ByteString& content, CBC_QRCoderBitVector* bits) {
-  std::vector<uint8_t> bytes;
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> bytes;
   uint32_t value = 0;
   // TODO(thestig): This is wrong, as |bytes| is empty.
   for (size_t i = 0; i < bytes.size(); i += 2) {
@@ -224,18 +225,19 @@
   return false;
 }
 
-std::vector<uint8_t> GenerateECBytes(pdfium::span<const uint8_t> dataBytes,
-                                     size_t numEcBytesInBlock) {
+std::vector<uint8_t, FxAllocAllocator<uint8_t>> GenerateECBytes(
+    pdfium::span<const uint8_t> dataBytes,
+    size_t numEcBytesInBlock) {
   // If |numEcBytesInBlock| is 0, the encoder will fail anyway.
   ASSERT(numEcBytesInBlock > 0);
   std::vector<int32_t> toEncode(dataBytes.size() + numEcBytesInBlock);
   std::copy(dataBytes.begin(), dataBytes.end(), toEncode.begin());
 
-  std::vector<uint8_t> ecBytes;
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> ecBytes;
   CBC_ReedSolomonEncoder encoder(g_QRCodeField);
   if (encoder.Encode(&toEncode, numEcBytesInBlock)) {
-    ecBytes = std::vector<uint8_t>(toEncode.begin() + dataBytes.size(),
-                                   toEncode.end());
+    ecBytes = std::vector<uint8_t, FxAllocAllocator<uint8_t>>(
+        toEncode.begin() + dataBytes.size(), toEncode.end());
     ASSERT(ecBytes.size() == static_cast<size_t>(numEcBytesInBlock));
   }
   return ecBytes;
@@ -365,10 +367,11 @@
     if (numDataBytesInBlock < 0 || numEcBytesInBlock <= 0)
       return false;
 
-    std::vector<uint8_t> dataBytes(numDataBytesInBlock);
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> dataBytes(
+        numDataBytesInBlock);
     memcpy(dataBytes.data(), bits->GetArray() + dataBytesOffset,
            numDataBytesInBlock);
-    std::vector<uint8_t> ecBytes =
+    std::vector<uint8_t, FxAllocAllocator<uint8_t>> ecBytes =
         GenerateECBytes(dataBytes, numEcBytesInBlock);
     if (ecBytes.empty())
       return false;
@@ -384,14 +387,16 @@
 
   for (size_t x = 0; x < maxNumDataBytes; x++) {
     for (size_t j = 0; j < blocks.size(); j++) {
-      const std::vector<uint8_t>& dataBytes = blocks[j].data;
+      const std::vector<uint8_t, FxAllocAllocator<uint8_t>>& dataBytes =
+          blocks[j].data;
       if (x < dataBytes.size())
         result->AppendBits(dataBytes[x], 8);
     }
   }
   for (size_t y = 0; y < maxNumEcBytes; y++) {
     for (size_t l = 0; l < blocks.size(); l++) {
-      const std::vector<uint8_t>& ecBytes = blocks[l].ecc;
+      const std::vector<uint8_t, FxAllocAllocator<uint8_t>>& ecBytes =
+          blocks[l].ecc;
       if (y < ecBytes.size())
         result->AppendBits(ecBytes[y], 8);
     }
