[poppler] poppler/SplashOutputDev.cc
Albert Astals Cid
aacid at kemper.freedesktop.org
Tue Jul 7 09:55:38 PDT 2015
poppler/SplashOutputDev.cc | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
New commits:
commit 2fc1f540754391ffa87d7fe9f3438e134d821207
Author: Thomas Freitag <Thomas.Freitag at alfa.de>
Date: Tue Jul 7 18:48:51 2015 +0200
[Splash] Fix crash in PDF with nested softmasks
Bug #91240
diff --git a/poppler/SplashOutputDev.cc b/poppler/SplashOutputDev.cc
index 801d7e1..97ed1c1 100644
--- a/poppler/SplashOutputDev.cc
+++ b/poppler/SplashOutputDev.cc
@@ -1229,6 +1229,7 @@ struct T3GlyphStack {
struct SplashTransparencyGroup {
int tx, ty; // translation coordinates
SplashBitmap *tBitmap; // bitmap for transparency group
+ SplashBitmap *softmask; // bitmap for softmasks
GfxColorSpace *blendingColorSpace;
GBool isolated;
@@ -2780,8 +2781,8 @@ void SplashOutputDev::setSoftMaskFromImageMask(GfxState *state,
imgMaskData.height = height;
imgMaskData.y = 0;
- maskBitmap = new SplashBitmap(bitmap->getWidth(), bitmap->getHeight(), 1, splashModeMono8, gFalse);
- maskSplash = new Splash(maskBitmap, vectorAntialias);
+ transpGroupStack->softmask = new SplashBitmap(bitmap->getWidth(), bitmap->getHeight(), 1, splashModeMono8, gFalse);
+ maskSplash = new Splash(transpGroupStack->softmask, vectorAntialias);
maskColor[0] = 0;
maskSplash->clear(maskColor);
maskColor[0] = 0xff;
@@ -2798,13 +2799,15 @@ void SplashOutputDev::unsetSoftMaskFromImageMask(GfxState *state, double *baseMa
/* transfer mask to alpha channel! */
// memcpy(maskBitmap->getAlphaPtr(), maskBitmap->getDataPtr(), bitmap->getRowSize() * bitmap->getHeight());
// memset(maskBitmap->getDataPtr(), 0, bitmap->getRowSize() * bitmap->getHeight());
- Guchar *dest = bitmap->getAlphaPtr();
- Guchar *src = maskBitmap->getDataPtr();
- for (int c= 0; c < maskBitmap->getRowSize() * maskBitmap->getHeight(); c++) {
- dest[c] = src[c];
+ if (transpGroupStack->softmask != NULL) {
+ Guchar *dest = bitmap->getAlphaPtr();
+ Guchar *src = transpGroupStack->softmask->getDataPtr();
+ for (int c= 0; c < transpGroupStack->softmask->getRowSize() * transpGroupStack->softmask->getHeight(); c++) {
+ dest[c] = src[c];
+ }
+ delete transpGroupStack->softmask;
+ transpGroupStack->softmask = NULL;
}
- delete maskBitmap;
- maskBitmap = NULL;
endTransparencyGroup(state);
baseMatrix[4] += transpGroupStack->tx;
baseMatrix[5] += transpGroupStack->ty;
@@ -3986,6 +3989,7 @@ void SplashOutputDev::beginTransparencyGroup(GfxState *state, double *bbox,
// push a new stack entry
transpGroup = new SplashTransparencyGroup();
+ transpGroup->softmask = NULL;
transpGroup->tx = tx;
transpGroup->ty = ty;
transpGroup->blendingColorSpace = blendingColorSpace;
More information about the poppler
mailing list