summaryrefslogtreecommitdiff
path: root/core/fpdfapi/render
diff options
context:
space:
mode:
authorLei Zhang <thestig@chromium.org>2018-05-30 18:35:31 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-05-30 18:35:31 +0000
commit1c0de38c90947694b5d75349802a0b737418afe3 (patch)
tree7cfa0dc92a1d695e234468f62d87eb1bca10d2fb /core/fpdfapi/render
parent625255b6f8a6f6ee4b7b1eab8202b47c46659fb7 (diff)
downloadpdfium-1c0de38c90947694b5d75349802a0b737418afe3.tar.xz
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 Change-Id: If994a91cdcd84b8977196256ee6926e20c4b74aa Reviewed-on: https://pdfium-review.googlesource.com/33210 Reviewed-by: Henrique Nakashima <hnakashima@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'core/fpdfapi/render')
-rw-r--r--core/fpdfapi/render/cpdf_renderstatus.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index d63d321b9f..af976903be 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<float> floats(comps);