diff --git a/xfa/fde/css/cfde_csssyntaxparser.cpp b/xfa/fde/css/cfde_csssyntaxparser.cpp
index e943f29..b896eb7 100644
--- a/xfa/fde/css/cfde_csssyntaxparser.cpp
+++ b/xfa/fde/css/cfde_csssyntaxparser.cpp
@@ -41,7 +41,8 @@
   Reset(bOnlyDeclaration);
   if (!m_TextData.EstimateSize(iTextDatSize))
     return false;
-  return m_TextPlane.AttachBuffer(pBuffer, iBufferSize);
+  m_TextPlane.AttachBuffer(pBuffer, iBufferSize);
+  return true;
 }
 
 void CFDE_CSSSyntaxParser::Reset(bool bOnlyDeclaration) {
diff --git a/xfa/fde/css/cfde_csstextbuf.cpp b/xfa/fde/css/cfde_csstextbuf.cpp
index 2d8f93f..c408a95 100644
--- a/xfa/fde/css/cfde_csstextbuf.cpp
+++ b/xfa/fde/css/cfde_csstextbuf.cpp
@@ -19,19 +19,11 @@
   Reset();
 }
 
-void CFDE_CSSTextBuf::Reset() {
-  if (!m_bExtBuf) {
-    FX_Free(m_pBuffer);
-    m_pBuffer = nullptr;
-  }
-  m_iDatPos = m_iDatLen = m_iBufLen;
-}
-
-bool CFDE_CSSTextBuf::AttachBuffer(const wchar_t* pBuffer, int32_t iBufLen) {
+void CFDE_CSSTextBuf::AttachBuffer(const wchar_t* pBuffer, int32_t iBufLen) {
   Reset();
   m_pBuffer = const_cast<wchar_t*>(pBuffer);
   m_iDatLen = m_iBufLen = iBufLen;
-  return m_bExtBuf = true;
+  m_bExtBuf = true;
 }
 
 bool CFDE_CSSTextBuf::EstimateSize(int32_t iAllocSize) {
@@ -41,20 +33,40 @@
   return ExpandBuf(iAllocSize);
 }
 
+bool CFDE_CSSTextBuf::AppendChar(wchar_t wch) {
+  if (m_iDatLen >= m_iBufLen && !ExpandBuf(m_iBufLen * 2))
+    return false;
+  m_pBuffer[m_iDatLen++] = wch;
+  return true;
+}
+
+void CFDE_CSSTextBuf::Reset() {
+  if (!m_bExtBuf) {
+    FX_Free(m_pBuffer);
+    m_pBuffer = nullptr;
+  }
+  m_iDatPos = m_iDatLen = m_iBufLen;
+}
+
+int32_t CFDE_CSSTextBuf::TrimEnd() {
+  while (m_iDatLen > 0 && m_pBuffer[m_iDatLen - 1] <= ' ')
+    --m_iDatLen;
+  AppendChar(0);
+  return --m_iDatLen;
+}
+
 bool CFDE_CSSTextBuf::ExpandBuf(int32_t iDesiredSize) {
   if (m_bExtBuf)
     return false;
-  if (!m_pBuffer)
-    m_pBuffer = FX_Alloc(wchar_t, iDesiredSize);
-  else if (m_iBufLen != iDesiredSize)
-    m_pBuffer = FX_Realloc(wchar_t, m_pBuffer, iDesiredSize);
-  else
+
+  if (m_pBuffer && m_iBufLen == iDesiredSize)
     return true;
 
-  if (!m_pBuffer) {
-    m_iBufLen = 0;
-    return false;
-  }
+  if (m_pBuffer)
+    m_pBuffer = FX_Realloc(wchar_t, m_pBuffer, iDesiredSize);
+  else
+    m_pBuffer = FX_Alloc(wchar_t, iDesiredSize);
+
   m_iBufLen = iDesiredSize;
   return true;
 }
diff --git a/xfa/fde/css/cfde_csstextbuf.h b/xfa/fde/css/cfde_csstextbuf.h
index 71c76f3..eaeb085 100644
--- a/xfa/fde/css/cfde_csstextbuf.h
+++ b/xfa/fde/css/cfde_csstextbuf.h
@@ -17,24 +17,14 @@
   CFDE_CSSTextBuf();
   ~CFDE_CSSTextBuf();
 
-  bool AttachBuffer(const wchar_t* pBuffer, int32_t iBufLen);
+  void AttachBuffer(const wchar_t* pBuffer, int32_t iBufLen);
   bool EstimateSize(int32_t iAllocSize);
-  bool AppendChar(wchar_t wch) {
-    if (m_iDatLen >= m_iBufLen && !ExpandBuf(m_iBufLen * 2))
-      return false;
-    m_pBuffer[m_iDatLen++] = wch;
-    return true;
-  }
+  bool AppendChar(wchar_t wch);
 
   void Clear() { m_iDatPos = m_iDatLen = 0; }
   void Reset();
 
-  int32_t TrimEnd() {
-    while (m_iDatLen > 0 && m_pBuffer[m_iDatLen - 1] <= ' ')
-      --m_iDatLen;
-    AppendChar(0);
-    return --m_iDatLen;
-  }
+  int32_t TrimEnd();
 
   void Subtract(int32_t iStart, int32_t iLength);
   bool IsEOF() const { return m_iDatPos >= m_iDatLen; }
