From 6ef10bb80315d50c99adc0dd0212437ea4916873 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Tue, 3 Jul 2018 20:40:06 +0000 Subject: M68: Exclude certain colorspace types for calculating transparency backdrop color. Per discussion for the "CS" entry in the PDF 1.7 spec table 7.13, several types of colorspaces do not meet the requirements of this particular colorspace entry. In terms of implementation, this avoids hitting a NOTREACHED() in CPDF_PatternCS::GetRGB(). BUG=chromium:847346 TBR=hnakashima@chromium.org Change-Id: If994a91cdcd84b8977196256ee6926e20c4b74aa Reviewed-on: https://pdfium-review.googlesource.com/33210 Reviewed-by: Henrique Nakashima Commit-Queue: Lei Zhang (cherry picked from commit 1c0de38c90947694b5d75349802a0b737418afe3) Reviewed-on: https://pdfium-review.googlesource.com/37011 Reviewed-by: Lei Zhang --- constants/transparency.h | 1 + core/fpdfapi/render/cpdf_renderstatus.cpp | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/constants/transparency.h b/constants/transparency.h index 22a89c33c4..6532868178 100644 --- a/constants/transparency.h +++ b/constants/transparency.h @@ -46,6 +46,7 @@ constexpr char kTR[] = "TR"; constexpr char kGroupSubType[] = "S"; constexpr char kTransparency[] = "Transparency"; +constexpr char kCS[] = "CS"; constexpr char kI[] = "I"; } // namespace transparency diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index 847488de72..c446a5edf1 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp @@ -2646,17 +2646,19 @@ FX_ARGB CPDF_RenderStatus::GetBackColor(const CPDF_Dictionary* pSMaskDict, const CPDF_Object* pCSObj = nullptr; const CPDF_Dictionary* pGroup = pGroupDict ? pGroupDict->GetDictFor("Group") : nullptr; - if (pGroup) { - // TODO(thestig): Check if "CS" is from PDF spec 1.7, table 13. - pCSObj = pGroup->GetDirectObjectFor("CS"); - } + if (pGroup) + pCSObj = pGroup->GetDirectObjectFor(pdfium::transparency::kCS); const CPDF_ColorSpace* pCS = m_pContext->GetDocument()->LoadColorSpace(pCSObj); if (!pCS) return kDefaultColor; + int family = pCS->GetFamily(); + if (family == PDFCS_LAB || family == PDFCS_ICCBASED || pCS->IsSpecial()) + return kDefaultColor; + // Store Color Space Family to use in CPDF_RenderStatus::Initialize(). - *pCSFamily = pCS->GetFamily(); + *pCSFamily = family; uint32_t comps = std::max(8u, pCS->CountComponents()); std::vector floats(comps); -- cgit v1.2.3