diff --git a/core/fxcrt/cfx_memorystream.cpp b/core/fxcrt/cfx_memorystream.cpp
index 4361fdb..066582e 100644
--- a/core/fxcrt/cfx_memorystream.cpp
+++ b/core/fxcrt/cfx_memorystream.cpp
@@ -32,21 +32,27 @@
   return true;
 }
 
+pdfium::span<const uint8_t> CFX_MemoryStream::GetSpan() const {
+  return pdfium::make_span(m_data).first(m_nCurSize);
+}
+
 bool CFX_MemoryStream::ReadBlockAtOffset(void* buffer,
                                          FX_FILESIZE offset,
                                          size_t size) {
   if (!buffer || offset < 0 || !size)
     return false;
 
-  FX_SAFE_SIZE_T newPos = size;
-  newPos += offset;
-  if (!newPos.IsValid() || newPos.ValueOrDefault(0) == 0 ||
-      newPos.ValueOrDie() > m_nCurSize) {
+  FX_SAFE_SIZE_T new_pos = size;
+  new_pos += offset;
+  if (!new_pos.IsValid() || new_pos.ValueOrDefault(0) == 0 ||
+      new_pos.ValueOrDie() > m_nCurSize) {
     return false;
   }
 
-  m_nCurPos = newPos.ValueOrDie();
-  memcpy(buffer, &GetBuffer()[offset], size);
+  m_nCurPos = new_pos.ValueOrDie();
+  // Safe to cast `offset` because it was used to calculate `new_pos` above, and
+  // `new_pos` is valid.
+  memcpy(buffer, &GetSpan()[static_cast<size_t>(offset)], size);
   return true;
 }
 
diff --git a/core/fxcrt/cfx_memorystream.h b/core/fxcrt/cfx_memorystream.h
index a573a60..f487183 100644
--- a/core/fxcrt/cfx_memorystream.h
+++ b/core/fxcrt/cfx_memorystream.h
@@ -10,6 +10,7 @@
 #include "core/fxcrt/data_vector.h"
 #include "core/fxcrt/fx_stream.h"
 #include "core/fxcrt/retain_ptr.h"
+#include "third_party/base/span.h"
 
 class CFX_MemoryStream final : public IFX_SeekableStream {
  public:
@@ -28,7 +29,7 @@
                           size_t size) override;
   bool Flush() override;
 
-  const uint8_t* GetBuffer() const { return m_data.data(); }
+  pdfium::span<const uint8_t> GetSpan() const;
 
  private:
   CFX_MemoryStream();
diff --git a/core/fxcrt/cfx_memorystream_unittest.cpp b/core/fxcrt/cfx_memorystream_unittest.cpp
index 716e47b..31a4e0c 100644
--- a/core/fxcrt/cfx_memorystream_unittest.cpp
+++ b/core/fxcrt/cfx_memorystream_unittest.cpp
@@ -35,13 +35,10 @@
   auto stream = pdfium::MakeRetain<CFX_MemoryStream>();
   const uint8_t kData1[] = {'a', 'b', 'c'};
   ASSERT_TRUE(stream->WriteBlock(kData1, sizeof(kData1)));
-  auto stream_contents =
-      pdfium::make_span(stream->GetBuffer(), stream->GetSize());
-  ASSERT_THAT(stream_contents, testing::ElementsAre('a', 'b', 'c'));
+  ASSERT_THAT(stream->GetSpan(), testing::ElementsAre('a', 'b', 'c'));
 
   ASSERT_TRUE(stream->WriteBlockAtOffset(kData1, 5, sizeof(kData1)));
-  stream_contents = pdfium::make_span(stream->GetBuffer(), stream->GetSize());
-  ASSERT_THAT(stream_contents,
+  ASSERT_THAT(stream->GetSpan(),
               testing::ElementsAre('a', 'b', 'c', '\0', '\0', 'a', 'b', 'c'));
 
   uint8_t buffer[4];
@@ -53,15 +50,11 @@
   auto stream = pdfium::MakeRetain<CFX_MemoryStream>();
   const uint8_t kData1[] = {'a', 'b', 'c'};
   ASSERT_TRUE(stream->WriteBlock(kData1, sizeof(kData1)));
-  auto stream_contents =
-      pdfium::make_span(stream->GetBuffer(), stream->GetSize());
-  ASSERT_THAT(stream_contents, testing::ElementsAre('a', 'b', 'c'));
+  ASSERT_THAT(stream->GetSpan(), testing::ElementsAre('a', 'b', 'c'));
 
   ASSERT_TRUE(stream->WriteBlock(kData1, 0));
-  stream_contents = pdfium::make_span(stream->GetBuffer(), stream->GetSize());
-  ASSERT_THAT(stream_contents, testing::ElementsAre('a', 'b', 'c'));
+  ASSERT_THAT(stream->GetSpan(), testing::ElementsAre('a', 'b', 'c'));
 
   ASSERT_TRUE(stream->WriteBlock(nullptr, 0));
-  stream_contents = pdfium::make_span(stream->GetBuffer(), stream->GetSize());
-  ASSERT_THAT(stream_contents, testing::ElementsAre('a', 'b', 'c'));
+  ASSERT_THAT(stream->GetSpan(), testing::ElementsAre('a', 'b', 'c'));
 }
diff --git a/fxjs/xfa/cjx_node.cpp b/fxjs/xfa/cjx_node.cpp
index 942c411..6f287be 100644
--- a/fxjs/xfa/cjx_node.cpp
+++ b/fxjs/xfa/cjx_node.cpp
@@ -370,8 +370,8 @@
     pElement->Save(pMemoryStream);
   }
 
-  return CJS_Result::Success(runtime->NewString(
-      ByteStringView(pMemoryStream->GetBuffer(), pMemoryStream->GetSize())));
+  return CJS_Result::Success(
+      runtime->NewString(ByteStringView(pMemoryStream->GetSpan())));
 }
 
 CJS_Result CJX_Node::setAttribute(
diff --git a/xfa/fxfa/parser/xfa_utils.cpp b/xfa/fxfa/parser/xfa_utils.cpp
index fe2c7eb..7aef2ef 100644
--- a/xfa/fxfa/parser/xfa_utils.cpp
+++ b/xfa/fxfa/parser/xfa_utils.cpp
@@ -196,9 +196,8 @@
 
         auto pMemStream = pdfium::MakeRetain<CFX_MemoryStream>();
         pRichTextXML->Save(pMemStream);
-        wsChildren += WideString::FromUTF8(
-            ByteStringView(pMemStream->GetBuffer(),
-                           static_cast<size_t>(pMemStream->GetSize())));
+        wsChildren +=
+            WideString::FromUTF8(ByteStringView(pMemStream->GetSpan()));
       } else if (pRawValueNode->GetElementType() == XFA_Element::Sharpxml &&
                  contentType.has_value() &&
                  contentType.value().EqualsASCII("text/xml")) {
