| 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 846ad827af6248b2e1200d44566504f821006f77..901f412db7d96e5d21e60ab389a3d0d43e718292 100644
|
| --- a/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
|
| +++ b/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
|
| @@ -253,19 +253,20 @@ FX_BOOL CPDF_DIBSource::Load(CPDF_Document* pDoc, const CPDF_Stream* pStream, CP
|
| }
|
| int CPDF_DIBSource::ContinueToLoadMask()
|
| {
|
| + FX_DWORD bpc = GetValidBpc();
|
| if (m_bImageMask) {
|
| m_bpp = 1;
|
| - m_bpc = 1;
|
| + bpc = 1;
|
| m_nComponents = 1;
|
| m_AlphaFlag = 1;
|
| - } else if (m_bpc * m_nComponents == 1) {
|
| + } else if (bpc * m_nComponents == 1) {
|
| m_bpp = 1;
|
| - } else if (m_bpc * m_nComponents <= 8) {
|
| + } else if (bpc * m_nComponents <= 8) {
|
| m_bpp = 8;
|
| } else {
|
| m_bpp = 24;
|
| }
|
| - if (!m_bpc || !m_nComponents) {
|
| + if (!bpc || !m_nComponents) {
|
| return 0;
|
| }
|
| FX_SAFE_DWORD pitch = m_Width;
|
| @@ -854,13 +855,17 @@ int CPDF_DIBSource::StartLoadMaskDIB()
|
| }
|
| void CPDF_DIBSource::LoadPalette()
|
| {
|
| - if (m_bpc * m_nComponents > 8) {
|
| + FX_DWORD bpc = GetValidBpc();
|
| + if (bpc == 0) {
|
| + return;
|
| + }
|
| + if (bpc * m_nComponents > 8) {
|
| return;
|
| }
|
| if (m_pColorSpace == NULL) {
|
| return;
|
| }
|
| - if (m_bpc * m_nComponents == 1) {
|
| + if (bpc * m_nComponents == 1) {
|
| if (m_bDefaultDecode && (m_Family == PDFCS_DEVICEGRAY || m_Family == PDFCS_DEVICERGB)) {
|
| return;
|
| }
|
| @@ -884,16 +889,16 @@ void CPDF_DIBSource::LoadPalette()
|
| }
|
| return;
|
| }
|
| - if (m_pColorSpace == CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY) && m_bpc == 8 && m_bDefaultDecode) {
|
| + if (m_pColorSpace == CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY) && bpc == 8 && m_bDefaultDecode) {
|
| } else {
|
| - int palette_count = 1 << (m_bpc * m_nComponents);
|
| + int palette_count = 1 << (bpc * m_nComponents);
|
| CFX_FixedBufGrow<FX_FLOAT, 16> color_values(m_nComponents);
|
| FX_FLOAT* color_value = color_values;
|
| for (int i = 0; i < palette_count; i ++) {
|
| int color_data = i;
|
| for (FX_DWORD j = 0; j < m_nComponents; j ++) {
|
| - int encoded_component = color_data % (1 << m_bpc);
|
| - color_data /= 1 << m_bpc;
|
| + int encoded_component = color_data % (1 << bpc);
|
| + color_data /= 1 << bpc;
|
| color_value[j] = m_pCompData[j].m_DecodeMin + m_pCompData[j].m_DecodeStep * encoded_component;
|
| }
|
| FX_FLOAT R = 0, G = 0, B = 0;
|
| @@ -937,7 +942,7 @@ FX_DWORD CPDF_DIBSource::GetValidBpc() const
|
| }
|
| }
|
| }
|
| - if (bpc != 1 && bpc != 2 && bpc != 4 && bpc != 8 && bpc != 12 && bpc != 16) {
|
| + if (bpc != 1 && bpc != 2 && bpc != 4 && bpc != 8 && bpc != 16) {
|
| bpc = 0;
|
| }
|
|
|
|
|