summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLei Zhang <thestig@chromium.org>2018-07-03 20:40:06 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-07-03 20:40:06 +0000
commit6ef10bb80315d50c99adc0dd0212437ea4916873 (patch)
tree5b91b463d086424ab248bcffba71ce3e7c3ac3c3
parentb27de7c64c5e9b949f3a76f962abdc2fa5c524e8 (diff)
downloadpdfium-6ef10bb80315d50c99adc0dd0212437ea4916873.tar.xz
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 <hnakashima@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org> (cherry picked from commit 1c0de38c90947694b5d75349802a0b737418afe3) Reviewed-on: https://pdfium-review.googlesource.com/37011 Reviewed-by: Lei Zhang <thestig@chromium.org>
-rw-r--r--constants/transparency.h1
-rw-r--r--core/fpdfapi/render/cpdf_renderstatus.cpp12
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<float> floats(comps);