diff --git a/xfa/fde/css/cfde_csstextbuf.cpp b/xfa/fde/css/cfde_csstextbuf.cpp
index c408a95..8ccdca9 100644
--- a/xfa/fde/css/cfde_csstextbuf.cpp
+++ b/xfa/fde/css/cfde_csstextbuf.cpp
@@ -10,6 +10,7 @@
 
 CFDE_CSSTextBuf::CFDE_CSSTextBuf()
     : m_bExtBuf(false),
+      m_pExtBuffer(nullptr),
       m_pBuffer(nullptr),
       m_iBufLen(0),
       m_iDatLen(0),
@@ -21,7 +22,7 @@
 
 void CFDE_CSSTextBuf::AttachBuffer(const wchar_t* pBuffer, int32_t iBufLen) {
   Reset();
-  m_pBuffer = const_cast<wchar_t*>(pBuffer);
+  m_pExtBuffer = pBuffer;
   m_iDatLen = m_iBufLen = iBufLen;
   m_bExtBuf = true;
 }
@@ -36,6 +37,8 @@
 bool CFDE_CSSTextBuf::AppendChar(wchar_t wch) {
   if (m_iDatLen >= m_iBufLen && !ExpandBuf(m_iBufLen * 2))
     return false;
+
+  ASSERT(!m_bExtBuf);
   m_pBuffer[m_iDatLen++] = wch;
   return true;
 }
@@ -49,12 +52,17 @@
 }
 
 int32_t CFDE_CSSTextBuf::TrimEnd() {
+  ASSERT(!m_bExtBuf);
   while (m_iDatLen > 0 && m_pBuffer[m_iDatLen - 1] <= ' ')
     --m_iDatLen;
   AppendChar(0);
   return --m_iDatLen;
 }
 
+const wchar_t* CFDE_CSSTextBuf::GetBuffer() const {
+  return m_bExtBuf ? m_pExtBuffer : m_pBuffer;
+}
+
 bool CFDE_CSSTextBuf::ExpandBuf(int32_t iDesiredSize) {
   if (m_bExtBuf)
     return false;
@@ -73,6 +81,7 @@
 
 void CFDE_CSSTextBuf::Subtract(int32_t iStart, int32_t iLength) {
   ASSERT(iStart >= 0 && iLength >= 0);
+  ASSERT(!m_bExtBuf);
 
   iLength = pdfium::clamp(iLength, 0, m_iDatLen - iStart);
   memmove(m_pBuffer, m_pBuffer + iStart, iLength * sizeof(wchar_t));
diff --git a/xfa/fde/css/cfde_csstextbuf.h b/xfa/fde/css/cfde_csstextbuf.h
index eaeb085..be6800f 100644
--- a/xfa/fde/css/cfde_csstextbuf.h
+++ b/xfa/fde/css/cfde_csstextbuf.h
@@ -29,20 +29,22 @@
   void Subtract(int32_t iStart, int32_t iLength);
   bool IsEOF() const { return m_iDatPos >= m_iDatLen; }
 
-  wchar_t GetAt(int32_t index) const { return m_pBuffer[index]; }
-  wchar_t GetChar() const { return m_pBuffer[m_iDatPos]; }
+  wchar_t GetAt(int32_t index) const { return GetBuffer()[index]; }
+  wchar_t GetChar() const { return GetBuffer()[m_iDatPos]; }
   wchar_t GetNextChar() const {
-    return (m_iDatPos + 1 >= m_iDatLen) ? 0 : m_pBuffer[m_iDatPos + 1];
+    return (m_iDatPos + 1 >= m_iDatLen) ? 0 : GetBuffer()[m_iDatPos + 1];
   }
 
   void MoveNext() { m_iDatPos++; }
 
   int32_t GetLength() const { return m_iDatLen; }
-  const wchar_t* GetBuffer() const { return m_pBuffer; }
+  const wchar_t* GetBuffer() const;
 
  protected:
   bool ExpandBuf(int32_t iDesiredSize);
+
   bool m_bExtBuf;
+  const wchar_t* m_pExtBuffer;
   wchar_t* m_pBuffer;
   int32_t m_iBufLen;
   int32_t m_iDatLen;
