From 35d3d550157a31eeaa6ec8bcd8b62233d1584acb Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Mon, 17 Sep 2018 17:11:54 +0000 Subject: Encapsulate CPDF_StreamAcc::LoadAllData(). Make it a private method, and add public methods so only limited combinations of LoadAllData() arguments are possible. Change-Id: I8c2220eb0e95012350858876586f7c470c40a7c3 Reviewed-on: https://pdfium-review.googlesource.com/42590 Reviewed-by: Tom Sepez Commit-Queue: Lei Zhang --- core/fpdfapi/page/cpdf_docpagedata.cpp | 2 +- core/fpdfapi/parser/cpdf_stream_acc.cpp | 14 ++++++++++++++ core/fpdfapi/parser/cpdf_stream_acc.h | 5 ++++- core/fpdfapi/render/cpdf_dibbase.cpp | 4 ++-- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/core/fpdfapi/page/cpdf_docpagedata.cpp b/core/fpdfapi/page/cpdf_docpagedata.cpp index 6744e0f6a7..9ee8d588e4 100644 --- a/core/fpdfapi/page/cpdf_docpagedata.cpp +++ b/core/fpdfapi/page/cpdf_docpagedata.cpp @@ -470,7 +470,7 @@ RetainPtr CPDF_DocPageData::GetFontFileStreamAcc( org_size = std::max(org_size, 0); auto pFontAcc = pdfium::MakeRetain(pFontStream); - pFontAcc->LoadAllData(false, org_size, false); + pFontAcc->LoadAllDataFilteredWithEstimatedSize(org_size); m_FontFileMap[pFontStream] = pFontAcc; return pFontAcc; } diff --git a/core/fpdfapi/parser/cpdf_stream_acc.cpp b/core/fpdfapi/parser/cpdf_stream_acc.cpp index 1083e3177e..78bcb57e0b 100644 --- a/core/fpdfapi/parser/cpdf_stream_acc.cpp +++ b/core/fpdfapi/parser/cpdf_stream_acc.cpp @@ -20,6 +20,11 @@ CPDF_StreamAcc::~CPDF_StreamAcc() { void CPDF_StreamAcc::LoadAllData(bool bRawAccess, uint32_t estimated_size, bool bImageAcc) { + if (bRawAccess) { + ASSERT(!estimated_size); + ASSERT(!bImageAcc); + } + if (!m_pStream) return; @@ -63,6 +68,15 @@ void CPDF_StreamAcc::LoadAllDataFiltered() { LoadAllData(false, 0, false); } +void CPDF_StreamAcc::LoadAllDataFilteredWithEstimatedSize( + uint32_t estimated_size) { + LoadAllData(false, estimated_size, false); +} + +void CPDF_StreamAcc::LoadAllDataImageAcc(uint32_t estimated_size) { + LoadAllData(false, estimated_size, true); +} + void CPDF_StreamAcc::LoadAllDataRaw() { LoadAllData(true, 0, false); } diff --git a/core/fpdfapi/parser/cpdf_stream_acc.h b/core/fpdfapi/parser/cpdf_stream_acc.h index fae8ba0516..3c42639828 100644 --- a/core/fpdfapi/parser/cpdf_stream_acc.h +++ b/core/fpdfapi/parser/cpdf_stream_acc.h @@ -24,8 +24,9 @@ class CPDF_StreamAcc final : public Retainable { CPDF_StreamAcc(const CPDF_StreamAcc&) = delete; CPDF_StreamAcc& operator=(const CPDF_StreamAcc&) = delete; - void LoadAllData(bool bRawAccess, uint32_t estimated_size, bool bImageAcc); void LoadAllDataFiltered(); + void LoadAllDataFilteredWithEstimatedSize(uint32_t estimated_size); + void LoadAllDataImageAcc(uint32_t estimated_size); void LoadAllDataRaw(); const CPDF_Stream* GetStream() const { return m_pStream.Get(); } @@ -44,6 +45,8 @@ class CPDF_StreamAcc final : public Retainable { explicit CPDF_StreamAcc(const CPDF_Stream* pStream); ~CPDF_StreamAcc() override; + void LoadAllData(bool bRawAccess, uint32_t estimated_size, bool bImageAcc); + private: uint8_t* m_pData = nullptr; uint32_t m_dwSize = 0; diff --git a/core/fpdfapi/render/cpdf_dibbase.cpp b/core/fpdfapi/render/cpdf_dibbase.cpp index a37a0aecd5..d342a99ae0 100644 --- a/core/fpdfapi/render/cpdf_dibbase.cpp +++ b/core/fpdfapi/render/cpdf_dibbase.cpp @@ -143,7 +143,7 @@ bool CPDF_DIBBase::Load(CPDF_Document* pDoc, const CPDF_Stream* pStream) { return false; m_pStreamAcc = pdfium::MakeRetain(pStream); - m_pStreamAcc->LoadAllData(false, src_size.ValueOrDie(), true); + m_pStreamAcc->LoadAllDataImageAcc(src_size.ValueOrDie()); if (m_pStreamAcc->GetSize() == 0 || !m_pStreamAcc->GetData()) return false; @@ -256,7 +256,7 @@ CPDF_DIBBase::LoadState CPDF_DIBBase::StartLoadDIBBase( return LoadState::kFail; m_pStreamAcc = pdfium::MakeRetain(pStream); - m_pStreamAcc->LoadAllData(false, src_size.ValueOrDie(), true); + m_pStreamAcc->LoadAllDataImageAcc(src_size.ValueOrDie()); if (m_pStreamAcc->GetSize() == 0 || !m_pStreamAcc->GetData()) return LoadState::kFail; -- cgit v1.2.3