Avoid multiplying by 0x010101 for RGB value computation Replaces CL at https://pdfium-review.googlesource.com/c/pdfium/+/75770 It is clearer to use the pre-existing ArgbEncode() function rather than realizing that this multiplication results in an RGB value where all the components are equal. -- use unsigned shifts in ArgbEncode() to avoid undefined behavior. Change-Id: Icd5003d0c85b78ef5d0020a74d73a3926fe22cd8 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/75811 Reviewed-by: Daniel Hosseinian <dhoss@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxge/dib/cfx_dibbase.cpp b/core/fxge/dib/cfx_dibbase.cpp index a58b84f..cff1d79 100644 --- a/core/fxge/dib/cfx_dibbase.cpp +++ b/core/fxge/dib/cfx_dibbase.cpp
@@ -650,7 +650,7 @@ } else if (GetBPP() == 8) { m_palette.resize(256); for (int i = 0; i < 256; ++i) - m_palette[i] = 0xff000000 | (i * 0x10101); + m_palette[i] = ArgbEncode(0xff, i, i, i); } } @@ -690,7 +690,7 @@ if (GetBPP() == 1) return index ? 0xffffffff : 0xff000000; - return index * 0x10101 | 0xff000000; + return ArgbEncode(0xff, index, index, index); } void CFX_DIBBase::SetPaletteArgb(int index, uint32_t color) { @@ -840,7 +840,7 @@ pal[i] = (palette[i] & 0x00ffffff) | (alpha << 24); } else { for (int i = 0; i < 256; ++i) - pal[i] = (i * 0x10101) | (alpha << 24); + pal[i] = ArgbEncode(alpha, i, i, i); } }
diff --git a/core/fxge/dib/cfx_dibitmap.cpp b/core/fxge/dib/cfx_dibitmap.cpp index 4c85633..1052b35 100644 --- a/core/fxge/dib/cfx_dibitmap.cpp +++ b/core/fxge/dib/cfx_dibitmap.cpp
@@ -515,7 +515,7 @@ return (*pos) << 24; case FXDIB_Format::k8bppRgb: return HasPalette() ? GetPaletteSpan()[*pos] - : (0xff000000 | ((*pos) * 0x10101)); + : ArgbEncode(0xff, *pos, *pos, *pos); case FXDIB_Format::kRgb: case FXDIB_Format::kRgb32: return FXARGB_GETDIB(pos) | 0xff000000;
diff --git a/core/fxge/dib/cfx_imagetransformer.cpp b/core/fxge/dib/cfx_imagetransformer.cpp index ffcc7d9..c5e1576 100644 --- a/core/fxge/dib/cfx_imagetransformer.cpp +++ b/core/fxge/dib/cfx_imagetransformer.cpp
@@ -309,7 +309,7 @@ argb[i] = palette[i]; } else { for (size_t i = 0; i < pdfium::size(argb); i++) - argb[i] = 0xff000000 | (i * 0x010101); + argb[i] = ArgbEncode(0xff, i, i, i); } int destBpp = calc_data.bitmap->GetBPP() / 8; auto func = [&calc_data, &argb](const BilinearData& data, uint8_t* dest) {
diff --git a/core/fxge/dib/cfx_scanlinecompositor.cpp b/core/fxge/dib/cfx_scanlinecompositor.cpp index 47c8880..e8362d7 100644 --- a/core/fxge/dib/cfx_scanlinecompositor.cpp +++ b/core/fxge/dib/cfx_scanlinecompositor.cpp
@@ -2253,7 +2253,8 @@ int DestBpp, const uint8_t* clip_scan) { for (int col = 0; col < pixel_count; col++) { - FX_ARGB argb = pPalette ? pPalette[*src_scan] : (*src_scan) * 0x010101; + FX_ARGB argb = pPalette ? pPalette[*src_scan] + : ArgbEncode(0, *src_scan, *src_scan, *src_scan); int src_r = FXARGB_R(argb); int src_g = FXARGB_G(argb); int src_b = FXARGB_B(argb); @@ -2764,7 +2765,7 @@ pPalette[1] = 0xffffffff; } else { for (size_t i = 0; i < pal_count; ++i) - pPalette[i] = i * 0x10101; + pPalette[i] = ArgbEncode(0, i, i, i); } }
diff --git a/core/fxge/dib/fx_dib.h b/core/fxge/dib/fx_dib.h index 2cfdd49..a167214 100644 --- a/core/fxge/dib/fx_dib.h +++ b/core/fxge/dib/fx_dib.h
@@ -122,7 +122,7 @@ // Returns FX_COLORREF. FX_COLORREF ArgbToColorRef(FX_ARGB argb); -constexpr FX_ARGB ArgbEncode(int a, int r, int g, int b) { +constexpr FX_ARGB ArgbEncode(uint32_t a, uint32_t r, uint32_t g, uint32_t b) { return (a << 24) | (r << 16) | (g << 8) | b; }
diff --git a/core/fxge/win32/cgdi_device_driver.cpp b/core/fxge/win32/cgdi_device_driver.cpp index 5648c2d..57c127a 100644 --- a/core/fxge/win32/cgdi_device_driver.cpp +++ b/core/fxge/win32/cgdi_device_driver.cpp
@@ -172,13 +172,11 @@ uint32_t* pPalette = (uint32_t*)(pbmih + 1); if (pBitmap->HasPalette()) { pdfium::span<const uint32_t> palette = pBitmap->GetPaletteSpan(); - for (int i = 0; i < 256; i++) { + for (int i = 0; i < 256; i++) pPalette[i] = palette[i]; - } } else { - for (int i = 0; i < 256; i++) { - pPalette[i] = i * 0x010101; - } + for (int i = 0; i < 256; i++) + pPalette[i] = ArgbEncode(0, i, i, i); } } if (pBitmap->GetBPP() == 1) {