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 e62290fdbbf34a6e1e201c268418e0bc3a7eae61..6e4dec3b6ab8f200fafe4a0d620f0b494f918f5a 100644 |
--- a/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp |
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp |
@@ -1446,38 +1446,33 @@ void CPDF_DIBSource::DownSampleScanline32Bit(int orig_Bpp, |
(int64_t)src_width / dest_width; |
src_x %= src_width; |
- // No need to check for 32-bit overflow, as |src_x| is bounded by |
- // |src_width| and DownSampleScanline already checked for overflow with the |
- // pitch calculation. |
- const uint8_t* pSrcPixel = nullptr; |
- size_t bit_offset = 0; |
- if (m_bpc % 8 == 0) { |
- pSrcPixel = pSrcLine + src_x * orig_Bpp; |
- } else { |
- size_t num_bits = src_x * m_bpc * m_nComponents; |
- pSrcPixel = pSrcLine + num_bits / 8; |
- bit_offset = num_bits % 8; |
- } |
- |
uint8_t* pDestPixel = dest_scan + i * dest_Bpp; |
FX_ARGB argb; |
if (src_x == last_src_x) { |
argb = last_argb; |
} else { |
CFX_FixedBufGrow<uint8_t, 128> extracted_components(m_nComponents); |
+ const uint8_t* pSrcPixel = nullptr; |
if (m_bpc % 8 != 0) { |
- uint64_t src_bit_pos = bit_offset; |
+ // No need to check for 32-bit overflow, as |src_x| is bounded by |
+ // |src_width| and DownSampleScanline() already checked for overflow |
+ // with the pitch calculation. |
+ size_t num_bits = src_x * m_bpc * m_nComponents; |
+ uint64_t src_bit_pos = num_bits % 8; |
+ pSrcPixel = pSrcLine + num_bits / 8; |
for (FX_DWORD j = 0; j < m_nComponents; ++j) { |
extracted_components[j] = static_cast<uint8_t>( |
GetBits8(pSrcPixel, src_bit_pos, m_bpc) * unit_To8Bpc); |
src_bit_pos += m_bpc; |
} |
pSrcPixel = extracted_components; |
- } else if (m_bpc == 16) { |
- for (FX_DWORD j = 0; j < m_nComponents; ++j) { |
- extracted_components[j] = pSrcPixel[j * 2]; |
+ } else { |
+ pSrcPixel = pSrcLine + src_x * orig_Bpp; |
+ if (m_bpc == 16) { |
+ for (FX_DWORD j = 0; j < m_nComponents; ++j) |
+ extracted_components[j] = pSrcPixel[j * 2]; |
+ pSrcPixel = extracted_components; |
} |
- pSrcPixel = extracted_components; |
} |
if (m_pColorSpace) { |