Add proper const/non-const versions of CPDF_Dictionary::GetStreamFor(). BUG=pdfium:234 Change-Id: Ia3e758bbe5c445c3856f5215e900e02a16b4d7d7 Reviewed-on: https://pdfium-review.googlesource.com/32910 Commit-Queue: Lei Zhang <thestig@chromium.org> Reviewed-by: dsinclair <dsinclair@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp index 2201e39..35fed75 100644 --- a/core/fpdfapi/font/cpdf_font.cpp +++ b/core/fpdfapi/font/cpdf_font.cpp
@@ -277,7 +277,7 @@ void CPDF_Font::LoadUnicodeMap() const { m_bToUnicodeLoaded = true; - CPDF_Stream* pStream = m_pFontDict->GetStreamFor("ToUnicode"); + const CPDF_Stream* pStream = m_pFontDict->GetStreamFor("ToUnicode"); if (!pStream) return;
diff --git a/core/fpdfapi/font/cpdf_tounicodemap.cpp b/core/fpdfapi/font/cpdf_tounicodemap.cpp index f21c4a3..7b5936c 100644 --- a/core/fpdfapi/font/cpdf_tounicodemap.cpp +++ b/core/fpdfapi/font/cpdf_tounicodemap.cpp
@@ -122,7 +122,7 @@ return uni.ValueOrDefault(0); } -void CPDF_ToUnicodeMap::Load(CPDF_Stream* pStream) { +void CPDF_ToUnicodeMap::Load(const CPDF_Stream* pStream) { CIDSet cid_set = CIDSET_UNKNOWN; auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pStream); pAcc->LoadAllDataFiltered();
diff --git a/core/fpdfapi/font/cpdf_tounicodemap.h b/core/fpdfapi/font/cpdf_tounicodemap.h index 62fc470..8f70791 100644 --- a/core/fpdfapi/font/cpdf_tounicodemap.h +++ b/core/fpdfapi/font/cpdf_tounicodemap.h
@@ -20,7 +20,7 @@ CPDF_ToUnicodeMap(); ~CPDF_ToUnicodeMap(); - void Load(CPDF_Stream* pStream); + void Load(const CPDF_Stream* pStream); WideString Lookup(uint32_t charcode) const; uint32_t ReverseLookup(wchar_t unicode) const;
diff --git a/core/fpdfapi/parser/cpdf_dictionary.cpp b/core/fpdfapi/parser/cpdf_dictionary.cpp index 29571d6c..0bdb8a8 100644 --- a/core/fpdfapi/parser/cpdf_dictionary.cpp +++ b/core/fpdfapi/parser/cpdf_dictionary.cpp
@@ -145,7 +145,11 @@ return ToArray(GetDirectObjectFor(key)); } -CPDF_Stream* CPDF_Dictionary::GetStreamFor(const ByteString& key) const { +const CPDF_Stream* CPDF_Dictionary::GetStreamFor(const ByteString& key) const { + return ToStream(GetDirectObjectFor(key)); +} + +CPDF_Stream* CPDF_Dictionary::GetStreamFor(const ByteString& key) { return ToStream(GetDirectObjectFor(key)); }
diff --git a/core/fpdfapi/parser/cpdf_dictionary.h b/core/fpdfapi/parser/cpdf_dictionary.h index 8ecbe2d..f2ee588 100644 --- a/core/fpdfapi/parser/cpdf_dictionary.h +++ b/core/fpdfapi/parser/cpdf_dictionary.h
@@ -52,7 +52,8 @@ bool GetBooleanFor(const ByteString& key, bool bDefault = false) const; float GetNumberFor(const ByteString& key) const; CPDF_Dictionary* GetDictFor(const ByteString& key) const; - CPDF_Stream* GetStreamFor(const ByteString& key) const; + const CPDF_Stream* GetStreamFor(const ByteString& key) const; + CPDF_Stream* GetStreamFor(const ByteString& key); CPDF_Array* GetArrayFor(const ByteString& key) const; CFX_FloatRect GetRectFor(const ByteString& key) const; CFX_Matrix GetMatrixFor(const ByteString& key) const;
diff --git a/core/fpdfapi/render/cpdf_dibsource.cpp b/core/fpdfapi/render/cpdf_dibsource.cpp index 3732eda..b2ebc74 100644 --- a/core/fpdfapi/render/cpdf_dibsource.cpp +++ b/core/fpdfapi/render/cpdf_dibsource.cpp
@@ -297,7 +297,7 @@ if (!m_pJbig2Context) { m_pJbig2Context = pdfium::MakeUnique<CCodec_Jbig2Context>(); if (m_pStreamAcc->GetImageParam()) { - CPDF_Stream* pGlobals = + const CPDF_Stream* pGlobals = m_pStreamAcc->GetImageParam()->GetStreamFor("JBIG2Globals"); if (pGlobals) { m_pGlobalStream = pdfium::MakeRetain<CPDF_StreamAcc>(pGlobals); @@ -653,24 +653,26 @@ CPDF_DIBSource::LoadState CPDF_DIBSource::StartLoadMask() { m_MatteColor = 0XFFFFFFFF; m_pMaskStream = m_pDict->GetStreamFor("SMask"); - if (m_pMaskStream) { - CPDF_Array* pMatte = m_pMaskStream->GetDict()->GetArrayFor("Matte"); - if (pMatte && m_pColorSpace && m_Family != PDFCS_PATTERN && - m_pColorSpace->CountComponents() <= m_nComponents) { - float R, G, B; - std::vector<float> colors(m_nComponents); - for (uint32_t i = 0; i < m_nComponents; i++) - colors[i] = pMatte->GetFloatAt(i); - - m_pColorSpace->GetRGB(colors.data(), &R, &G, &B); - m_MatteColor = FXARGB_MAKE(0, FXSYS_round(R * 255), FXSYS_round(G * 255), - FXSYS_round(B * 255)); - } - return StartLoadMaskDIB(); + if (!m_pMaskStream) { + m_pMaskStream = ToStream(m_pDict->GetDirectObjectFor("Mask")); + return m_pMaskStream ? StartLoadMaskDIB() : LoadState::kSuccess; } - m_pMaskStream = ToStream(m_pDict->GetDirectObjectFor("Mask")); - return m_pMaskStream ? StartLoadMaskDIB() : LoadState::kSuccess; + CPDF_Array* pMatte = m_pMaskStream->GetDict()->GetArrayFor("Matte"); + if (pMatte && m_pColorSpace && m_Family != PDFCS_PATTERN && + m_pColorSpace->CountComponents() <= m_nComponents) { + std::vector<float> colors(m_nComponents); + for (uint32_t i = 0; i < m_nComponents; i++) + colors[i] = pMatte->GetFloatAt(i); + + float R; + float G; + float B; + m_pColorSpace->GetRGB(colors.data(), &R, &G, &B); + m_MatteColor = FXARGB_MAKE(0, FXSYS_round(R * 255), FXSYS_round(G * 255), + FXSYS_round(B * 255)); + } + return StartLoadMaskDIB(); } CPDF_DIBSource::LoadState CPDF_DIBSource::ContinueLoadMaskDIB(
diff --git a/core/fpdfapi/render/cpdf_dibsource.h b/core/fpdfapi/render/cpdf_dibsource.h index 50d9c6e..fc390c2 100644 --- a/core/fpdfapi/render/cpdf_dibsource.h +++ b/core/fpdfapi/render/cpdf_dibsource.h
@@ -156,7 +156,7 @@ // Must come after |m_pCachedBitmap|. std::unique_ptr<CCodec_Jbig2Context> m_pJbig2Context; - UnownedPtr<CPDF_Stream> m_pMaskStream; + UnownedPtr<const CPDF_Stream> m_pMaskStream; LoadState m_Status = LoadState::kFail; };
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index 89cddba..8c3c879 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -1467,7 +1467,7 @@ if (blend_type == FXDIB_BLEND_UNSUPPORTED) return true; - const CPDF_Dictionary* pSMaskDict = + CPDF_Dictionary* pSMaskDict = ToDictionary(pPageObj->m_GeneralState.GetSoftMask()); if (pSMaskDict) { if (pPageObj->IsImage() && @@ -2525,7 +2525,7 @@ } RetainPtr<CFX_DIBitmap> CPDF_RenderStatus::LoadSMask( - const CPDF_Dictionary* pSMaskDict, + CPDF_Dictionary* pSMaskDict, FX_RECT* pClipRect, const CFX_Matrix* pMatrix) { if (!pSMaskDict)
diff --git a/core/fpdfapi/render/cpdf_renderstatus.h b/core/fpdfapi/render/cpdf_renderstatus.h index 19d613c..7dee814 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.h +++ b/core/fpdfapi/render/cpdf_renderstatus.h
@@ -149,7 +149,7 @@ bool bBackAlphaRequired, int* left, int* top); - RetainPtr<CFX_DIBitmap> LoadSMask(const CPDF_Dictionary* pSMaskDict, + RetainPtr<CFX_DIBitmap> LoadSMask(CPDF_Dictionary* pSMaskDict, FX_RECT* pClipRect, const CFX_Matrix* pMatrix); // Optionally write the colorspace family value into |pCSFamily|.
diff --git a/fpdfsdk/cpdfsdk_helpers.cpp b/fpdfsdk/cpdfsdk_helpers.cpp index 0836325..87ba9e2 100644 --- a/fpdfsdk/cpdfsdk_helpers.cpp +++ b/fpdfsdk/cpdfsdk_helpers.cpp
@@ -248,7 +248,7 @@ // SharedForm const CPDF_Dictionary* pRoot = pDoc->GetRoot(); if (pRoot) { - CPDF_Stream* pStream = pRoot->GetStreamFor("Metadata"); + const CPDF_Stream* pStream = pRoot->GetStreamFor("Metadata"); if (pStream) { CPDF_Metadata metaData(pStream); for (const auto& err : metaData.CheckForSharedForm())