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 79d73518a18c1235fbb62b0b14ae1342cc2c5783..4ed17cdfe521623301f42b5f988dc9c646730cbb 100644 |
--- a/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp |
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp |
@@ -505,10 +505,14 @@ DIB_COMP_DATA* CPDF_DIBSource::GetDecodeAndMaskArray(FX_BOOL& bDefaultDecode, FX |
} |
int max_data = (1 << m_bpc) - 1; |
CPDF_Array* pDecode = m_pDict->GetArray(FX_BSTRC("Decode")); |
+ FX_DWORD arrSize = pDecode ? pDecode->GetCount() : 0; |
+ if (arrSize == 0) { |
+ return NULL; |
+ } |
if (pDecode) { |
for (FX_DWORD i = 0; i < m_nComponents; i ++) { |
- pCompData[i].m_DecodeMin = pDecode->GetNumber(i * 2); |
- FX_FLOAT max = pDecode->GetNumber(i * 2 + 1); |
+ pCompData[i].m_DecodeMin = pDecode->GetNumber((i * 2) % arrSize); |
+ FX_FLOAT max = pDecode->GetNumber((i * 2 + 1) % arrSize); |
pCompData[i].m_DecodeStep = (max - pCompData[i].m_DecodeMin) / max_data; |
FX_FLOAT def_value, def_min, def_max; |
m_pColorSpace->GetDefaultValue(i, def_value, def_min, def_max); |