Index: core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp |
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp |
index a805ffa463ed52cd64da9ffce5b23c3c602e1fcd..79d73518a18c1235fbb62b0b14ae1342cc2c5783 100644 |
--- a/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp |
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp |
@@ -119,6 +119,7 @@ CPDF_DIBSource::CPDF_DIBSource() |
m_pColorSpace = NULL; |
m_bDefaultDecode = TRUE; |
m_bImageMask = FALSE; |
+ m_bDoBpcCheck = TRUE; |
m_pPalette = NULL; |
m_pCompData = NULL; |
m_bColorKey = FALSE; |
@@ -197,7 +198,7 @@ FX_BOOL CPDF_DIBSource::Load(CPDF_Document* pDoc, const CPDF_Stream* pStream, CP |
if (!LoadColorInfo(m_pStream->GetObjNum() != 0 ? NULL : pFormResources, pPageResources)) { |
return FALSE; |
} |
- if (m_bpc == 0 || m_nComponents == 0) { |
+ if (m_bDoBpcCheck && (m_bpc == 0 || m_nComponents == 0)) { |
return FALSE; |
} |
FX_SAFE_DWORD src_pitch = |
@@ -210,10 +211,6 @@ FX_BOOL CPDF_DIBSource::Load(CPDF_Document* pDoc, const CPDF_Stream* pStream, CP |
if (m_pStreamAcc->GetSize() == 0 || m_pStreamAcc->GetData() == NULL) { |
return FALSE; |
} |
- const CFX_ByteString& decoder = m_pStreamAcc->GetImageDecoder(); |
- if (!decoder.IsEmpty() && decoder == FX_BSTRC("CCITTFaxDecode")) { |
- m_bpc = 1; |
- } |
if (!CreateDecoder()) { |
return FALSE; |
} |
@@ -316,7 +313,7 @@ int CPDF_DIBSource::StartLoadDIBSource(CPDF_Document* pDoc, const CPDF_Stream* p |
if (!LoadColorInfo(m_pStream->GetObjNum() != 0 ? NULL : pFormResources, pPageResources)) { |
return 0; |
} |
- if (m_bpc == 0 || m_nComponents == 0) { |
+ if (m_bDoBpcCheck && (m_bpc == 0 || m_nComponents == 0)) { |
return 0; |
} |
FX_SAFE_DWORD src_pitch = |
@@ -446,11 +443,13 @@ FX_BOOL CPDF_DIBSource::LoadColorInfo(CPDF_Dictionary* pFormResources, CPDF_Dict |
if (pFilter->GetType() == PDFOBJ_NAME) { |
filter = pFilter->GetString(); |
if (filter == FX_BSTRC("JPXDecode")) { |
+ m_bDoBpcCheck = FALSE; |
return TRUE; |
} |
} else if (pFilter->GetType() == PDFOBJ_ARRAY) { |
CPDF_Array* pArray = (CPDF_Array*)pFilter; |
if (pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("JPXDecode")) { |
+ m_bDoBpcCheck = FALSE; |
return TRUE; |
} |
} |
@@ -560,7 +559,7 @@ int CPDF_DIBSource::CreateDecoder() |
if (decoder.IsEmpty()) { |
return 1; |
} |
- if (m_bpc == 0) { |
+ if (m_bDoBpcCheck && m_bpc == 0) { |
return 0; |
} |
FX_LPCBYTE src_data = m_pStreamAcc->GetData(); |