diff --git a/xfa/fxbarcode/common/BC_CommonByteArray.cpp b/xfa/fxbarcode/common/BC_CommonByteArray.cpp
index be48d51..afa8ac6 100644
--- a/xfa/fxbarcode/common/BC_CommonByteArray.cpp
+++ b/xfa/fxbarcode/common/BC_CommonByteArray.cpp
@@ -44,16 +44,16 @@
 CBC_CommonByteArray::~CBC_CommonByteArray() {
   FX_Free(m_bytes);
 }
-int32_t CBC_CommonByteArray::At(int32_t index) {
+int32_t CBC_CommonByteArray::At(int32_t index) const {
   return m_bytes[index] & 0xff;
 }
 void CBC_CommonByteArray::Set(int32_t index, int32_t value) {
   m_bytes[index] = (uint8_t)value;
 }
-int32_t CBC_CommonByteArray::Size() {
+int32_t CBC_CommonByteArray::Size() const {
   return m_size;
 }
-FX_BOOL CBC_CommonByteArray::IsEmpty() {
+FX_BOOL CBC_CommonByteArray::IsEmpty() const {
   return m_size == 0;
 }
 void CBC_CommonByteArray::AppendByte(int32_t value) {
diff --git a/xfa/fxbarcode/common/BC_CommonByteArray.h b/xfa/fxbarcode/common/BC_CommonByteArray.h
index 2570f81..cdda41b 100644
--- a/xfa/fxbarcode/common/BC_CommonByteArray.h
+++ b/xfa/fxbarcode/common/BC_CommonByteArray.h
@@ -9,6 +9,8 @@
 
 #include "core/fxcrt/include/fx_basic.h"
 
+// TODO(weili): The usage of this class should be replaced by
+// std::vector<uint8_t>.
 class CBC_CommonByteArray {
  public:
   CBC_CommonByteArray();
@@ -16,10 +18,10 @@
   CBC_CommonByteArray(uint8_t* byteArray, int32_t size);
   virtual ~CBC_CommonByteArray();
 
-  int32_t At(int32_t index);
+  int32_t At(int32_t index) const;
+  int32_t Size() const;
+  FX_BOOL IsEmpty() const;
   void Set(int32_t index, int32_t value);
-  int32_t Size();
-  FX_BOOL IsEmpty();
   void AppendByte(int32_t value);
   void Reserve(int32_t capacity);
   void Set(uint8_t* source, int32_t offset, int32_t count);
diff --git a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
index da0ad3f..c9425df 100644
--- a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
+++ b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
@@ -23,18 +23,19 @@
 #include "xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h"
 #include "xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h"
 
-CBC_ReedSolomonGF256* CBC_ReedSolomonGF256::QRCodeFild = nullptr;
+CBC_ReedSolomonGF256* CBC_ReedSolomonGF256::QRCodeField = nullptr;
 CBC_ReedSolomonGF256* CBC_ReedSolomonGF256::DataMatrixField = nullptr;
+
 void CBC_ReedSolomonGF256::Initialize() {
-  QRCodeFild = new CBC_ReedSolomonGF256(0x011D);
-  QRCodeFild->Init();
+  QRCodeField = new CBC_ReedSolomonGF256(0x011D);
+  QRCodeField->Init();
   DataMatrixField = new CBC_ReedSolomonGF256(0x012D);
   DataMatrixField->Init();
 }
 
 void CBC_ReedSolomonGF256::Finalize() {
-  delete QRCodeFild;
-  QRCodeFild = nullptr;
+  delete QRCodeField;
+  QRCodeField = nullptr;
   delete DataMatrixField;
   DataMatrixField = nullptr;
 }
@@ -53,20 +54,22 @@
   }
   m_logTable[0] = 0;
 }
+
 void CBC_ReedSolomonGF256::Init() {
-  m_zero = new CBC_ReedSolomonGF256Poly(this, 0);
-  m_one = new CBC_ReedSolomonGF256Poly(this, 1);
+  m_zero.reset(new CBC_ReedSolomonGF256Poly(this, 0));
+  m_one.reset(new CBC_ReedSolomonGF256Poly(this, 1));
 }
-CBC_ReedSolomonGF256::~CBC_ReedSolomonGF256() {
-  delete m_zero;
-  delete m_one;
+
+CBC_ReedSolomonGF256::~CBC_ReedSolomonGF256() {}
+
+CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::GetZero() const {
+  return m_zero.get();
 }
-CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::GetZero() {
-  return m_zero;
+
+CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::GetOne() const {
+  return m_one.get();
 }
-CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::GetOne() {
-  return m_one;
-}
+
 CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::BuildMonomial(
     int32_t degree,
     int32_t coefficient,
@@ -88,12 +91,15 @@
   BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
   return temp;
 }
+
 int32_t CBC_ReedSolomonGF256::AddOrSubtract(int32_t a, int32_t b) {
   return a ^ b;
 }
+
 int32_t CBC_ReedSolomonGF256::Exp(int32_t a) {
   return m_expTable[a];
 }
+
 int32_t CBC_ReedSolomonGF256::Log(int32_t a, int32_t& e) {
   if (a == 0) {
     e = BCExceptionAIsZero;
@@ -101,6 +107,7 @@
   }
   return m_logTable[a];
 }
+
 int32_t CBC_ReedSolomonGF256::Inverse(int32_t a, int32_t& e) {
   if (a == 0) {
     e = BCExceptionAIsZero;
@@ -108,6 +115,7 @@
   }
   return m_expTable[255 - m_logTable[a]];
 }
+
 int32_t CBC_ReedSolomonGF256::Multiply(int32_t a, int32_t b) {
   if (a == 0 || b == 0) {
     return 0;
diff --git a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h
index cd78811..ec0f1ff 100644
--- a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h
+++ b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h
@@ -7,20 +7,23 @@
 #ifndef XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_
 #define XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_
 
+#include <memory>
+
 #include "core/fxcrt/include/fx_basic.h"
 #include "xfa/fxbarcode/utils.h"
 
 class CBC_ReedSolomonGF256Poly;
+
 class CBC_ReedSolomonGF256 {
  public:
+  explicit CBC_ReedSolomonGF256(int32_t primitive);
+  virtual ~CBC_ReedSolomonGF256();
+
   static void Initialize();
   static void Finalize();
-  static CBC_ReedSolomonGF256* QRCodeFild;
-  static CBC_ReedSolomonGF256* DataMatrixField;
-  CBC_ReedSolomonGF256(int32_t primitive);
-  virtual ~CBC_ReedSolomonGF256();
-  CBC_ReedSolomonGF256Poly* GetZero();
-  CBC_ReedSolomonGF256Poly* GetOne();
+
+  CBC_ReedSolomonGF256Poly* GetZero() const;
+  CBC_ReedSolomonGF256Poly* GetOne() const;
   CBC_ReedSolomonGF256Poly* BuildMonomial(int32_t degree,
                                           int32_t coefficient,
                                           int32_t& e);
@@ -31,11 +34,14 @@
   int32_t Multiply(int32_t a, int32_t b);
   virtual void Init();
 
+  static CBC_ReedSolomonGF256* QRCodeField;
+  static CBC_ReedSolomonGF256* DataMatrixField;
+
  private:
   int32_t m_expTable[256];
   int32_t m_logTable[256];
-  CBC_ReedSolomonGF256Poly* m_zero;
-  CBC_ReedSolomonGF256Poly* m_one;
+  std::unique_ptr<CBC_ReedSolomonGF256Poly> m_zero;
+  std::unique_ptr<CBC_ReedSolomonGF256Poly> m_one;
 };
 
 #endif  // XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_
