diff --git a/xfa/fgas/layout/fgas_rtfbreak.cpp b/xfa/fgas/layout/fgas_rtfbreak.cpp
index fdc9a57..6488978 100644
--- a/xfa/fgas/layout/fgas_rtfbreak.cpp
+++ b/xfa/fgas/layout/fgas_rtfbreak.cpp
@@ -41,7 +41,6 @@
       m_iFontHeight(240),
       m_iFontSize(240),
       m_iTabWidth(720000),
-      m_PositionedTabs(),
       m_wDefChar(0xFEFF),
       m_iDefChar(0),
       m_wLineBreakChar(L'\n'),
@@ -65,7 +64,6 @@
 
 CFX_RTFBreak::~CFX_RTFBreak() {
   Reset();
-  m_PositionedTabs.RemoveAll();
 }
 
 void CFX_RTFBreak::SetLineBoundary(FX_FLOAT fLineStart, FX_FLOAT fLineEnd) {
@@ -122,20 +120,13 @@
 }
 
 void CFX_RTFBreak::AddPositionedTab(FX_FLOAT fTabPos) {
-  int32_t iLineEnd = m_iBoundaryEnd;
-  int32_t iTabPos = FXSYS_round(fTabPos * 20000.0f) + m_iBoundaryStart;
-  if (iTabPos > iLineEnd)
-    iTabPos = iLineEnd;
-  if (m_PositionedTabs.Find(iTabPos, 0) > -1)
+  int32_t iTabPos = std::min(FXSYS_round(fTabPos * 20000.0f) + m_iBoundaryStart,
+                             m_iBoundaryEnd);
+  auto it = std::lower_bound(m_PositionedTabs.begin(), m_PositionedTabs.end(),
+                             iTabPos);
+  if (it != m_PositionedTabs.end() && *it == iTabPos)
     return;
-
-  int32_t iCount = m_PositionedTabs.GetSize();
-  int32_t iFind = 0;
-  for (; iFind < iCount; iFind++) {
-    if (m_PositionedTabs[iFind] > iTabPos)
-      break;
-  }
-  m_PositionedTabs.InsertAt(iFind, iTabPos);
+  m_PositionedTabs.insert(it, iTabPos);
 }
 
 void CFX_RTFBreak::SetLineBreakTolerance(FX_FLOAT fTolerance) {
@@ -222,21 +213,17 @@
 }
 
 int32_t CFX_RTFBreak::GetLastPositionedTab() const {
-  int32_t iCount = m_PositionedTabs.GetSize();
-  if (iCount < 1)
-    return m_iBoundaryStart;
-  return m_PositionedTabs[iCount - 1];
+  return m_PositionedTabs.empty() ? m_iBoundaryStart : m_PositionedTabs.back();
 }
 
 bool CFX_RTFBreak::GetPositionedTab(int32_t* iTabPos) const {
-  int32_t iCount = m_PositionedTabs.GetSize();
-  for (int32_t i = 0; i < iCount; i++) {
-    if (m_PositionedTabs[i] > *iTabPos) {
-      *iTabPos = m_PositionedTabs[i];
-      return true;
-    }
-  }
-  return false;
+  auto it = std::upper_bound(m_PositionedTabs.begin(), m_PositionedTabs.end(),
+                             *iTabPos);
+  if (it == m_PositionedTabs.end())
+    return false;
+
+  *iTabPos = *it;
+  return true;
 }
 
 CFX_RTFBreakType CFX_RTFBreak::AppendChar(FX_WCHAR wch) {
@@ -739,7 +726,7 @@
 
   CFX_RTFChar* pCharArray = tca.data();
   CFX_RTFChar* pCur = pCharArray + iLength;
-  iLength--;
+  --iLength;
   if (bAllChars)
     pCur->m_nBreakType = FX_LBT_UNKNOWN;
 
@@ -922,12 +909,11 @@
     iWidth = pText->pWidths[i];
     dwProps = FX_GetUnicodeProperties(wch);
     dwCharType = (dwProps & FX_CHARTYPEBITSMASK);
-    if (dwCharType == FX_CHARTYPE_ArabicAlef && iWidth == 0) {
-      wPrev = 0xFEFF;
+    if (iWidth == 0) {
+      if (dwCharType == FX_CHARTYPE_ArabicAlef)
+        wPrev = 0xFEFF;
       continue;
     }
-    if (iWidth == 0)
-      continue;
 
     iCharWidth = FXSYS_abs(iWidth);
     bEmptyChar =
diff --git a/xfa/fgas/layout/fgas_rtfbreak.h b/xfa/fgas/layout/fgas_rtfbreak.h
index 55b99ae..2b6c2cf 100644
--- a/xfa/fgas/layout/fgas_rtfbreak.h
+++ b/xfa/fgas/layout/fgas_rtfbreak.h
@@ -208,7 +208,7 @@
   int32_t m_iFontHeight;
   int32_t m_iFontSize;
   int32_t m_iTabWidth;
-  CFX_ArrayTemplate<int32_t> m_PositionedTabs;
+  std::vector<int32_t> m_PositionedTabs;
   FX_WCHAR m_wDefChar;
   int32_t m_iDefChar;
   FX_WCHAR m_wLineBreakChar;
