From 9e625db795ca7e112d692bda7200b69a873d75f7 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Thu, 12 Apr 2018 19:51:56 +0000 Subject: Slightly simplify CPDF_Color::SetColorSpace(). All the callers pass in a valid colorspace. SetColorSpace() is the only caller to CPDF_ColorSpace::GetDefaultColor(). Also adjust that method to make it harder to use incorrectly. Change-Id: I5cf7b6d2abef630e1b9443043b13d1c2b5bed18a Reviewed-on: https://pdfium-review.googlesource.com/30351 Reviewed-by: Henrique Nakashima Commit-Queue: Lei Zhang --- core/fpdfapi/page/cpdf_color.cpp | 7 ++++--- core/fpdfapi/page/cpdf_colorspace.cpp | 14 +++++++------- core/fpdfapi/page/cpdf_colorspace.h | 9 ++++++--- 3 files changed, 17 insertions(+), 13 deletions(-) (limited to 'core') diff --git a/core/fpdfapi/page/cpdf_color.cpp b/core/fpdfapi/page/cpdf_color.cpp index d364e8e822..73e3d36ec4 100644 --- a/core/fpdfapi/page/cpdf_color.cpp +++ b/core/fpdfapi/page/cpdf_color.cpp @@ -60,6 +60,7 @@ bool CPDF_Color::IsPatternInternal() const { } void CPDF_Color::SetColorSpace(CPDF_ColorSpace* pCS) { + ASSERT(pCS); if (m_pCS == pCS) { if (!m_pBuffer) m_pBuffer = pCS->CreateBuf(); @@ -72,10 +73,10 @@ void CPDF_Color::SetColorSpace(CPDF_ColorSpace* pCS) { ReleaseColorSpace(); m_pCS = pCS; - if (pCS) { + if (IsPatternInternal()) m_pBuffer = pCS->CreateBuf(); - pCS->GetDefaultColor(m_pBuffer); - } + else + m_pBuffer = pCS->CreateBufAndSetDefaultColor(); } void CPDF_Color::SetValue(const float* comps) { diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp index 7cecb19188..d9717f1d58 100644 --- a/core/fpdfapi/page/cpdf_colorspace.cpp +++ b/core/fpdfapi/page/cpdf_colorspace.cpp @@ -485,25 +485,25 @@ void CPDF_ColorSpace::Release() { delete this; } -int CPDF_ColorSpace::GetBufSize() const { +size_t CPDF_ColorSpace::GetBufSize() const { if (m_Family == PDFCS_PATTERN) return sizeof(PatternValue); return m_nComponents * sizeof(float); } -float* CPDF_ColorSpace::CreateBuf() { - int size = GetBufSize(); - return reinterpret_cast(FX_Alloc(uint8_t, size)); +float* CPDF_ColorSpace::CreateBuf() const { + return reinterpret_cast(FX_Alloc(uint8_t, GetBufSize())); } -void CPDF_ColorSpace::GetDefaultColor(float* buf) const { - if (!buf || m_Family == PDFCS_PATTERN) - return; +float* CPDF_ColorSpace::CreateBufAndSetDefaultColor() const { + ASSERT(m_Family != PDFCS_PATTERN); + float* buf = CreateBuf(); float min; float max; for (uint32_t i = 0; i < m_nComponents; i++) GetDefaultValue(i, &buf[i], &min, &max); + return buf; } uint32_t CPDF_ColorSpace::CountComponents() const { diff --git a/core/fpdfapi/page/cpdf_colorspace.h b/core/fpdfapi/page/cpdf_colorspace.h index e9108578f5..b9879d135c 100644 --- a/core/fpdfapi/page/cpdf_colorspace.h +++ b/core/fpdfapi/page/cpdf_colorspace.h @@ -53,9 +53,12 @@ class CPDF_ColorSpace { void Release(); - int GetBufSize() const; - float* CreateBuf(); - void GetDefaultColor(float* buf) const; + size_t GetBufSize() const; + float* CreateBuf() const; + + // Should only be called if this colorspace is not a pattern. + float* CreateBufAndSetDefaultColor() const; + uint32_t CountComponents() const; int GetFamily() const { return m_Family; } bool IsSpecial() const { -- cgit v1.2.3