vcl/source/gdi/pngread.cxx | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-)
New commits: commit b3caa0eb0d85718aab4c3b37d73755f930433eed Author: Caolán McNamara <caol...@redhat.com> Date: Wed Feb 8 13:33:02 2017 +0000 ofz#574 sanitize png palette indexes clarify we're not setting a pal index in the mask no logic changed intended, SetPixelIndex expands to this, just want to clarify that this is an alpha value, not an index into a palette (cherry picked from commit e5b23d924d60e7a0fb67c44c6dad3f4cb3bd5ddc) Change-Id: I006ffdf5c8c751e7e07b133716022e2a9b154478 e9bb188b116adf3eab4e2bb1d6da8badbaead88b Reviewed-on: https://gerrit.libreoffice.org/34035 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk> diff --git a/vcl/source/gdi/pngread.cxx b/vcl/source/gdi/pngread.cxx index c26a841..09aae89 100644 --- a/vcl/source/gdi/pngread.cxx +++ b/vcl/source/gdi/pngread.cxx @@ -1124,6 +1124,19 @@ void PNGReaderImpl::ImplApplyFilter() namespace { + sal_uInt8 SanitizePaletteIndex(sal_uInt8 nIndex, sal_uInt16 nPaletteEntryCount) + { + if (nIndex >= nPaletteEntryCount) + { + auto nSanitizedIndex = nIndex % nPaletteEntryCount; + SAL_WARN_IF(nIndex != nSanitizedIndex, "vcl", "invalid colormap index: " + << static_cast<unsigned int>(nIndex) << ", colormap len is: " + << nPaletteEntryCount); + nIndex = nSanitizedIndex; + } + return nIndex; + } + void SanitizePaletteIndexes(sal_uInt8* pEntries, int nLen, BitmapWriteAccess* pAcc) { sal_uInt16 nPaletteEntryCount = pAcc->GetPaletteEntryCount(); @@ -1612,7 +1625,7 @@ void PNGReaderImpl::ImplSetPixel( sal_uInt32 nY, sal_uInt32 nX, sal_uInt8 nPalIn return; nX >>= mnPreviewShift; - mpAcc->SetPixelIndex( nY, nX, nPalIndex ); + mpAcc->SetPixelIndex(nY, nX, SanitizePaletteIndex(nPalIndex, mpAcc->GetPaletteEntryCount())); } void PNGReaderImpl::ImplSetTranspPixel( sal_uInt32 nY, sal_uInt32 nX, const BitmapColor& rBitmapColor, bool bTrans ) @@ -1638,8 +1651,8 @@ void PNGReaderImpl::ImplSetAlphaPixel( sal_uInt32 nY, sal_uInt32 nX, return; nX >>= mnPreviewShift; - mpAcc->SetPixelIndex( nY, nX, nPalIndex ); - mpMaskAcc->SetPixelIndex( nY, nX, ~nAlpha ); + mpAcc->SetPixelIndex(nY, nX, SanitizePaletteIndex(nPalIndex, mpAcc->GetPaletteEntryCount())); + mpMaskAcc->SetPixel(nY, nX, BitmapColor(~nAlpha)); } void PNGReaderImpl::ImplSetAlphaPixel( sal_uInt32 nY, sal_uInt32 nX, @@ -1653,7 +1666,7 @@ void PNGReaderImpl::ImplSetAlphaPixel( sal_uInt32 nY, sal_uInt32 nX, mpAcc->SetPixel( nY, nX, rBitmapColor ); if (!mpMaskAcc) return; - mpMaskAcc->SetPixelIndex( nY, nX, ~nAlpha ); + mpMaskAcc->SetPixel(nY, nX, BitmapColor(~nAlpha)); } sal_uInt32 PNGReaderImpl::ImplReadsal_uInt32()
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits