diff --git a/fxbarcode/datamatrix/BC_C40Encoder.cpp b/fxbarcode/datamatrix/BC_C40Encoder.cpp
index e8aa679..8d352b1 100644
--- a/fxbarcode/datamatrix/BC_C40Encoder.cpp
+++ b/fxbarcode/datamatrix/BC_C40Encoder.cpp
@@ -67,21 +67,20 @@
     }
     int32_t available = context.m_symbolInfo->m_dataCapacity - curCodewordCount;
     if (!context.hasMoreCharacters()) {
-      CFX_WideString removed;
       if ((buffer.GetLength() % 3) == 2) {
         if (available < 2 || available > 2) {
-          lastCharSize =
-              backtrackOneCharacter(context, buffer, removed, lastCharSize, e);
-          if (e != BCExceptionNO) {
+          lastCharSize = BacktrackOneCharacter(&context, &buffer, lastCharSize);
+          if (lastCharSize < 0) {
+            e = BCExceptionGeneric;
             return;
           }
         }
       }
       while ((buffer.GetLength() % 3) == 1 &&
              ((lastCharSize <= 3 && available != 1) || lastCharSize > 3)) {
-        lastCharSize =
-            backtrackOneCharacter(context, buffer, removed, lastCharSize, e);
-        if (e != BCExceptionNO) {
+        lastCharSize = BacktrackOneCharacter(&context, &buffer, lastCharSize);
+        if (lastCharSize < 0) {
+          e = BCExceptionGeneric;
           return;
         }
       }
@@ -187,18 +186,21 @@
     return 0;
   }
 }
-int32_t CBC_C40Encoder::backtrackOneCharacter(CBC_EncoderContext& context,
-                                              CFX_WideString& buffer,
-                                              CFX_WideString& removed,
-                                              int32_t lastCharSize,
-                                              int32_t& e) {
-  int32_t count = buffer.GetLength();
-  buffer.Delete(count - lastCharSize, count);
-  context.m_pos--;
-  wchar_t c = context.getCurrentChar();
-  lastCharSize = encodeChar(c, removed, e);
+
+int32_t CBC_C40Encoder::BacktrackOneCharacter(CBC_EncoderContext* context,
+                                              CFX_WideString* buffer,
+                                              int32_t lastCharSize) {
+  int32_t count = buffer->GetLength();
+  buffer->Delete(count - lastCharSize, count);
+  context->m_pos--;
+  wchar_t c = context->getCurrentChar();
+  int32_t e = BCExceptionNO;
+  CFX_WideString removed;
+  int32_t len = encodeChar(c, removed, e);
   if (e != BCExceptionNO)
     return -1;
-  context.resetSymbolInfo();
-  return lastCharSize;
+
+  assert(len > 0);
+  context->resetSymbolInfo();
+  return len;
 }
diff --git a/fxbarcode/datamatrix/BC_C40Encoder.h b/fxbarcode/datamatrix/BC_C40Encoder.h
index ad8669d..550d226 100644
--- a/fxbarcode/datamatrix/BC_C40Encoder.h
+++ b/fxbarcode/datamatrix/BC_C40Encoder.h
@@ -29,11 +29,13 @@
   virtual int32_t encodeChar(wchar_t c, CFX_WideString& sb, int32_t& e);
 
  private:
-  int32_t backtrackOneCharacter(CBC_EncoderContext& context,
-                                CFX_WideString& buffer,
-                                CFX_WideString& removed,
-                                int32_t lastCharSize,
-                                int32_t& e);
+  // Moves back by 1 position in |context| and adjusts |buffer| accordingly
+  // using |lastCharSize|. Returns the length of the current character in
+  // |context| after adjusting the position. If the character cannot be encoded,
+  // return -1.
+  int32_t BacktrackOneCharacter(CBC_EncoderContext* context,
+                                CFX_WideString* buffer,
+                                int32_t lastCharSize);
 };
 
 #endif  // FXBARCODE_DATAMATRIX_BC_C40ENCODER_H_
