[Libreoffice-commits] core.git: Branch 'libreoffice-5-3' - vcl/source
Caolán McNamara
caolanm at redhat.com
Thu Feb 9 09:53:55 UTC 2017
vcl/source/gdi/pngread.cxx | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
New commits:
commit b3caa0eb0d85718aab4c3b37d73755f930433eed
Author: Caolán McNamara <caolanm at 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 <ci at libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos at 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()
More information about the Libreoffice-commits
mailing list