Remove |CPDF_DIB::m_pMaskStream|.
Instead, make it a local variable in CPDF_DIB::StartLoadMask().
StartLoadMask() can pass it directly to StartLoadDIBBase().
Change-Id: I829eadf05366408b6e8aef20b93694347de0c2b7
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/65832
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_dib.cpp b/core/fpdfapi/page/cpdf_dib.cpp
index 9bb2fb5..4dbb815 100644
--- a/core/fpdfapi/page/cpdf_dib.cpp
+++ b/core/fpdfapi/page/cpdf_dib.cpp
@@ -703,13 +703,13 @@
CPDF_DIB::LoadState CPDF_DIB::StartLoadMask() {
m_MatteColor = 0XFFFFFFFF;
- m_pMaskStream.Reset(m_pDict->GetStreamFor("SMask"));
- if (!m_pMaskStream) {
- m_pMaskStream.Reset(ToStream(m_pDict->GetDirectObjectFor("Mask")));
- return m_pMaskStream ? StartLoadMaskDIB() : LoadState::kSuccess;
+ RetainPtr<const CPDF_Stream> mask(m_pDict->GetStreamFor("SMask"));
+ if (!mask) {
+ mask.Reset(ToStream(m_pDict->GetDirectObjectFor("Mask")));
+ return mask ? StartLoadMaskDIB(std::move(mask)) : LoadState::kSuccess;
}
- const CPDF_Array* pMatte = m_pMaskStream->GetDict()->GetArrayFor("Matte");
+ const CPDF_Array* pMatte = mask->GetDict()->GetArrayFor("Matte");
if (pMatte && m_pColorSpace && m_Family != PDFCS_PATTERN &&
pMatte->size() == m_nComponents &&
m_pColorSpace->CountComponents() <= m_nComponents) {
@@ -723,7 +723,7 @@
m_MatteColor = ArgbEncode(0, FXSYS_roundf(R * 255), FXSYS_roundf(G * 255),
FXSYS_roundf(B * 255));
}
- return StartLoadMaskDIB();
+ return StartLoadMaskDIB(std::move(mask));
}
CPDF_DIB::LoadState CPDF_DIB::ContinueLoadMaskDIB(PauseIndicatorIface* pPause) {
@@ -752,11 +752,11 @@
return m_pStreamAcc->GetImageDecoder() == "JBIG2Decode";
}
-CPDF_DIB::LoadState CPDF_DIB::StartLoadMaskDIB() {
+CPDF_DIB::LoadState CPDF_DIB::StartLoadMaskDIB(
+ RetainPtr<const CPDF_Stream> mask) {
m_pMask = pdfium::MakeRetain<CPDF_DIB>();
- LoadState ret =
- m_pMask->StartLoadDIBBase(m_pDocument.Get(), m_pMaskStream.Get(), false,
- nullptr, nullptr, true, 0, false);
+ LoadState ret = m_pMask->StartLoadDIBBase(
+ m_pDocument.Get(), mask.Get(), false, nullptr, nullptr, true, 0, false);
if (ret == LoadState::kContinue) {
if (m_Status == LoadState::kFail)
m_Status = LoadState::kContinue;
diff --git a/core/fpdfapi/page/cpdf_dib.h b/core/fpdfapi/page/cpdf_dib.h
index 3a19883..6960cea 100644
--- a/core/fpdfapi/page/cpdf_dib.h
+++ b/core/fpdfapi/page/cpdf_dib.h
@@ -80,7 +80,7 @@
~CPDF_DIB() override;
LoadState StartLoadMask();
- LoadState StartLoadMaskDIB();
+ LoadState StartLoadMaskDIB(RetainPtr<const CPDF_Stream> mask);
bool ContinueToLoadMask();
LoadState ContinueLoadMaskDIB(PauseIndicatorIface* pPause);
bool LoadColorInfo(const CPDF_Dictionary* pFormResources,
@@ -156,8 +156,6 @@
// Must come after |m_pCachedBitmap|.
std::unique_ptr<fxcodec::Jbig2Context> m_pJbig2Context;
-
- RetainPtr<const CPDF_Stream> m_pMaskStream;
};
#endif // CORE_FPDFAPI_PAGE_CPDF_DIB_H_