diff --git a/core/fpdfapi/parser/cpdf_stream_acc.cpp b/core/fpdfapi/parser/cpdf_stream_acc.cpp
index dc6b180..1b097b5 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc.cpp
+++ b/core/fpdfapi/parser/cpdf_stream_acc.cpp
@@ -27,40 +27,11 @@
   if (!m_pStream)
     return;
 
-  uint32_t dwSrcSize = m_pStream->GetRawSize();
-  if (dwSrcSize == 0)
-    return;
-
   bool bProcessRawData = bRawAccess || !m_pStream->HasFilter();
-  if (bProcessRawData && m_pStream->IsMemoryBased()) {
-    m_pData = m_pStream->GetInMemoryRawData();
-    m_dwSize = dwSrcSize;
-    return;
-  }
-
-  uint8_t* pSrcData;
-  if (m_pStream->IsMemoryBased()) {
-    pSrcData = m_pStream->GetInMemoryRawData();
-  } else {
-    std::unique_ptr<uint8_t, FxFreeDeleter> pTempSrcData(
-        FX_Alloc(uint8_t, dwSrcSize));
-    if (!m_pStream->ReadRawData(0, pTempSrcData.get(), dwSrcSize))
-      return;
-
-    pSrcData = pTempSrcData.release();
-  }
-  if (bProcessRawData) {
-    m_pData = pSrcData;
-    m_dwSize = dwSrcSize;
-  } else if (!PDF_DataDecode({pSrcData, dwSrcSize}, m_pStream->GetDict(),
-                             estimated_size, bImageAcc, &m_pData, &m_dwSize,
-                             &m_ImageDecoder, &m_pImageParam)) {
-    m_pData = pSrcData;
-    m_dwSize = dwSrcSize;
-  }
-  if (pSrcData != m_pStream->GetInMemoryRawData() && pSrcData != m_pData)
-    FX_Free(pSrcData);
-  m_bNewBuf = m_pData != m_pStream->GetInMemoryRawData();
+  if (bProcessRawData)
+    ProcessRawData();
+  else
+    ProcessFilteredData(estimated_size, bImageAcc);
 }
 
 void CPDF_StreamAcc::LoadAllDataFiltered() {
@@ -108,3 +79,64 @@
   memcpy(p.get(), m_pData, m_dwSize);
   return p;
 }
+
+void CPDF_StreamAcc::ProcessRawData() {
+  uint32_t dwSrcSize = m_pStream->GetRawSize();
+  if (dwSrcSize == 0)
+    return;
+
+  if (m_pStream->IsMemoryBased()) {
+    m_pData = m_pStream->GetInMemoryRawData();
+    m_dwSize = dwSrcSize;
+    return;
+  }
+
+  std::unique_ptr<uint8_t, FxFreeDeleter> pData = ReadRawStream();
+  if (!pData)
+    return;
+
+  m_pData = pData.release();
+  m_dwSize = dwSrcSize;
+  m_bNewBuf = true;
+}
+
+void CPDF_StreamAcc::ProcessFilteredData(uint32_t estimated_size,
+                                         bool bImageAcc) {
+  uint32_t dwSrcSize = m_pStream->GetRawSize();
+  if (dwSrcSize == 0)
+    return;
+
+  uint8_t* pSrcData;
+  if (m_pStream->IsMemoryBased()) {
+    pSrcData = m_pStream->GetInMemoryRawData();
+  } else {
+    std::unique_ptr<uint8_t, FxFreeDeleter> pTempSrcData = ReadRawStream();
+    if (!pTempSrcData)
+      return;
+
+    pSrcData = pTempSrcData.release();
+  }
+
+  if (!PDF_DataDecode({pSrcData, dwSrcSize}, m_pStream->GetDict(),
+                      estimated_size, bImageAcc, &m_pData, &m_dwSize,
+                      &m_ImageDecoder, &m_pImageParam)) {
+    m_pData = pSrcData;
+    m_dwSize = dwSrcSize;
+  }
+  if (pSrcData != m_pStream->GetInMemoryRawData() && pSrcData != m_pData)
+    FX_Free(pSrcData);
+  m_bNewBuf = m_pData != m_pStream->GetInMemoryRawData();
+}
+
+std::unique_ptr<uint8_t, FxFreeDeleter> CPDF_StreamAcc::ReadRawStream() const {
+  ASSERT(m_pStream);
+  ASSERT(!m_pStream->IsMemoryBased());
+
+  uint32_t dwSrcSize = m_pStream->GetRawSize();
+  ASSERT(dwSrcSize);
+  std::unique_ptr<uint8_t, FxFreeDeleter> pSrcData(
+      FX_Alloc(uint8_t, dwSrcSize));
+  if (!m_pStream->ReadRawData(0, pSrcData.get(), dwSrcSize))
+    return nullptr;
+  return pSrcData;
+}
diff --git a/core/fpdfapi/parser/cpdf_stream_acc.h b/core/fpdfapi/parser/cpdf_stream_acc.h
index 6ecfece..611c78d 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc.h
+++ b/core/fpdfapi/parser/cpdf_stream_acc.h
@@ -47,6 +47,12 @@
 
   void LoadAllData(bool bRawAccess, uint32_t estimated_size, bool bImageAcc);
 
+  void ProcessRawData();
+  void ProcessFilteredData(uint32_t estimated_size, bool bImageAcc);
+
+  // Reads the raw data from |m_pStream|, or return nullptr on failure.
+  std::unique_ptr<uint8_t, FxFreeDeleter> ReadRawStream() const;
+
   uint8_t* m_pData = nullptr;
   uint32_t m_dwSize = 0;
   bool m_bNewBuf = false;
