Revert "Remove unreachable code in CPDF_DIBBase."
This reverts commit 214982c4d02a720c3b1b3de121cddc62189b8848.
Reason for revert: Turns out it is reachable.
Original change's description:
> Remove unreachable code in CPDF_DIBBase.
>
> The colorspace is always available when creating image decoders that use
> colorspaces.
>
> Change-Id: I20ac75edcd614ccc1e83de262c128776e9d03eed
> Reviewed-on: https://pdfium-review.googlesource.com/42872
> Commit-Queue: Ryan Harrison <rharrison@chromium.org>
> Reviewed-by: Ryan Harrison <rharrison@chromium.org>
TBR=thestig@chromium.org,rharrison@chromium.org
BUG=chromium:888743
# Not skipping CQ checks because original CL landed > 1 day ago.
Change-Id: I45903543f0e4bf2785660fb8c1e45c34febb6ecf
Reviewed-on: https://pdfium-review.googlesource.com/43050
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_dibbase.cpp b/core/fpdfapi/render/cpdf_dibbase.cpp
index 7391296..3557672 100644
--- a/core/fpdfapi/render/cpdf_dibbase.cpp
+++ b/core/fpdfapi/render/cpdf_dibbase.cpp
@@ -511,8 +511,6 @@
bool CPDF_DIBBase::CreateDCTDecoder(pdfium::span<const uint8_t> src_span,
const CPDF_Dictionary* pParams) {
- ASSERT(m_pColorSpace); // Assigned in LoadColorInfo().
-
CCodec_JpegModule* pJpegModule = CPDF_ModuleMgr::Get()->GetJpegModule();
m_pDecoder = pJpegModule->CreateDecoder(
src_span, m_Width, m_Height, m_nComponents,
@@ -541,35 +539,40 @@
m_nComponents = static_cast<uint32_t>(comps);
m_CompData.clear();
- switch (m_Family) {
- case PDFCS_DEVICEGRAY:
- case PDFCS_DEVICERGB:
- case PDFCS_DEVICECMYK: {
- uint32_t dwMinComps = ComponentsForFamily(m_Family);
- if (m_pColorSpace->CountComponents() < dwMinComps ||
- m_nComponents < dwMinComps) {
- return false;
+ if (m_pColorSpace) {
+ switch (m_Family) {
+ case PDFCS_DEVICEGRAY:
+ case PDFCS_DEVICERGB:
+ case PDFCS_DEVICECMYK: {
+ uint32_t dwMinComps = ComponentsForFamily(m_Family);
+ if (m_pColorSpace->CountComponents() < dwMinComps ||
+ m_nComponents < dwMinComps) {
+ return false;
+ }
+ break;
}
- break;
- }
- case PDFCS_LAB: {
- if (m_nComponents != 3 || m_pColorSpace->CountComponents() < 3)
- return false;
- break;
- }
- case PDFCS_ICCBASED: {
- if (!IsAllowedICCComponents(m_nComponents) ||
- !IsAllowedICCComponents(m_pColorSpace->CountComponents()) ||
- m_pColorSpace->CountComponents() < m_nComponents) {
- return false;
+ case PDFCS_LAB: {
+ if (m_nComponents != 3 || m_pColorSpace->CountComponents() < 3)
+ return false;
+ break;
}
- break;
+ case PDFCS_ICCBASED: {
+ if (!IsAllowedICCComponents(m_nComponents) ||
+ !IsAllowedICCComponents(m_pColorSpace->CountComponents()) ||
+ m_pColorSpace->CountComponents() < m_nComponents) {
+ return false;
+ }
+ break;
+ }
+ default: {
+ if (m_pColorSpace->CountComponents() != m_nComponents)
+ return false;
+ break;
+ }
}
- default: {
- if (m_pColorSpace->CountComponents() != m_nComponents)
- return false;
- break;
- }
+ } else {
+ if (m_Family == PDFCS_LAB && m_nComponents != 3)
+ return false;
}
if (!GetDecodeAndMaskArray(&m_bDefaultDecode, &m_bColorKey))
return false;
@@ -581,8 +584,6 @@
}
RetainPtr<CFX_DIBitmap> CPDF_DIBBase::LoadJpxBitmap() {
- ASSERT(m_pColorSpace); // Assigned in LoadColorInfo().
-
CCodec_JpxModule* pJpxModule = CPDF_ModuleMgr::Get()->GetJpxModule();
auto context = pdfium::MakeUnique<JpxBitMapContext>(pJpxModule);
context->set_decoder(
@@ -597,13 +598,22 @@
if (static_cast<int>(width) < m_Width || static_cast<int>(height) < m_Height)
return nullptr;
- if (components != m_pColorSpace->CountComponents())
- return nullptr;
-
bool bSwapRGB = false;
- if (m_pColorSpace == CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB)) {
- bSwapRGB = true;
- m_pColorSpace = nullptr;
+ if (m_pColorSpace) {
+ if (components != m_pColorSpace->CountComponents())
+ return nullptr;
+
+ if (m_pColorSpace == CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB)) {
+ bSwapRGB = true;
+ m_pColorSpace = nullptr;
+ }
+ } else {
+ if (components == 3) {
+ bSwapRGB = true;
+ } else if (components == 4) {
+ m_pColorSpace = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
+ }
+ m_nComponents = components;
}
FXDIB_Format format;
@@ -614,7 +624,6 @@
} else if (components == 4) {
format = FXDIB_Rgb32;
} else {
- // TODO(thestig): Is this reachable? Probably need to validate |components|.
width = (width * components + 2) / 3;
format = FXDIB_Rgb;
}
diff --git a/core/fxcodec/codec/ccodec_jpxmodule.cpp b/core/fxcodec/codec/ccodec_jpxmodule.cpp
index 2465ea7..28221be 100644
--- a/core/fxcodec/codec/ccodec_jpxmodule.cpp
+++ b/core/fxcodec/codec/ccodec_jpxmodule.cpp
@@ -646,8 +646,6 @@
std::unique_ptr<CJPX_Decoder> CCodec_JpxModule::CreateDecoder(
pdfium::span<const uint8_t> src_span,
CPDF_ColorSpace* cs) {
- // TODO(thestig): |cs| should never be nullptr in production, but
- // pdf_jpx_fuzzer.cc passes that in.
auto decoder = pdfium::MakeUnique<CJPX_Decoder>(cs);
if (!decoder->Init(src_span))
return nullptr;