[poppler] splash/SplashBitmap.cc splash/Splash.cc
Albert Astals Cid
aacid at kde.org
Mon Jun 25 12:54:33 PDT 2012
El Dilluns, 25 de juny de 2012, a les 09:56:01, Thomas Freitag va escriure:
> Hi Albert!
>
> This commit probably fixes the abort, but I fear the PDF will not be
> rendered, does it?
It renders fine from what i can see, you can have a look at it at
https://bugs.kde.org/attachment.cgi?id=72101
Cheers,
Albert
> The reason for it is that this bug is a duplicate of
> the poppler bug 49523, it causes a bogus memory allocation size in pdftoppm.
> Therefore I created a rebased patch for that bug and attached it there, so
> pdftoppm ist able to render also the PDF if KDE bug #302372.
>
> Cheers,
> Thomas
>
> On 24.06.2012 23:43, Albert Astals Cid wrote:
> > splash/Splash.cc | 37 +++++++++++++++++++++++--------------
> > splash/SplashBitmap.cc | 18 +++++++++++-------
> > 2 files changed, 34 insertions(+), 21 deletions(-)
> >
> > New commits:
> > commit f48eb669ae5c729c026554802e666e64399c0900
> > Author: Albert Astals Cid<aacid at kde.org>
> > Date: Sun Jun 24 23:43:03 2012 +0200
> >
> > Change SplashBitmap gmallocn to gmallocn_checkoverflow
> >
> > Fixes abort in KDE bug #302372
> >
> > diff --git a/splash/Splash.cc b/splash/Splash.cc
> > index e5f7667..0e07c70 100644
> > --- a/splash/Splash.cc
> > +++ b/splash/Splash.cc
> > @@ -11,7 +11,7 @@
> >
> > // All changes made under the Poppler project to this file are licensed
> > // under GPL version 2 or later
> > //
> >
> > -// Copyright (C) 2005-2011 Albert Astals Cid<aacid at kde.org>
> > +// Copyright (C) 2005-2012 Albert Astals Cid<aacid at kde.org>
> >
> > // Copyright (C) 2005 Marco Pesenti Gritti<mpg at redhat.com>
> > // Copyright (C) 2010-2012 Thomas Freitag<Thomas.Freitag at alfa.de>
> > // Copyright (C) 2010 Christian
> > Feuersänger<cfeuersaenger at googlemail.com>
> >
> > @@ -3625,6 +3625,10 @@ SplashError
> > Splash::arbitraryTransformImage(SplashImageSource src, void *srcData>
> > }
> > scaledImg = scaleImage(src, srcData, srcMode, nComps, srcAlpha,
> >
> > srcWidth, srcHeight, scaledWidth, scaledHeight);
> >
> > +
> > + if (scaledImg == NULL) {
> > + return splashErrBadArg;
> > + }
> >
> > // construct the three sections
> > i = 0;
> >
> > @@ -3803,22 +3807,27 @@ SplashBitmap *Splash::scaleImage(SplashImageSource
> > src, void *srcData,>
> > SplashBitmap *dest;
> >
> > dest = new SplashBitmap(scaledWidth, scaledHeight, 1, srcMode,
> > srcAlpha);
> >
> > - if (scaledHeight< srcHeight) {
> > - if (scaledWidth< srcWidth) {
> > - scaleImageYdXd(src, srcData, srcMode, nComps, srcAlpha,
> > - srcWidth, srcHeight, scaledWidth, scaledHeight, dest);
> > + if (dest->getDataPtr() != NULL) {
> > + if (scaledHeight< srcHeight) {
> > + if (scaledWidth< srcWidth) {
> > + scaleImageYdXd(src, srcData, srcMode, nComps, srcAlpha,
> > + srcWidth, srcHeight, scaledWidth, scaledHeight, dest);
> > + } else {
> > + scaleImageYdXu(src, srcData, srcMode, nComps, srcAlpha,
> > + srcWidth, srcHeight, scaledWidth, scaledHeight, dest);
> > + }
> >
> > } else {
> >
> > - scaleImageYdXu(src, srcData, srcMode, nComps, srcAlpha,
> > - srcWidth, srcHeight, scaledWidth, scaledHeight, dest);
> > + if (scaledWidth< srcWidth) {
> > + scaleImageYuXd(src, srcData, srcMode, nComps, srcAlpha,
> > + srcWidth, srcHeight, scaledWidth, scaledHeight, dest);
> > + } else {
> > + scaleImageYuXu(src, srcData, srcMode, nComps, srcAlpha,
> > + srcWidth, srcHeight, scaledWidth, scaledHeight, dest);
> > + }
> >
> > }
> >
> > } else {
> >
> > - if (scaledWidth< srcWidth) {
> > - scaleImageYuXd(src, srcData, srcMode, nComps, srcAlpha,
> > - srcWidth, srcHeight, scaledWidth, scaledHeight, dest);
> > - } else {
> > - scaleImageYuXu(src, srcData, srcMode, nComps, srcAlpha,
> > - srcWidth, srcHeight, scaledWidth, scaledHeight, dest);
> > - }
> > + delete dest;
> > + dest = NULL;
> >
> > }
> > return dest;
> >
> > }
> >
> > diff --git a/splash/SplashBitmap.cc b/splash/SplashBitmap.cc
> > index e4f27fc..cd85543 100644
> > --- a/splash/SplashBitmap.cc
> > +++ b/splash/SplashBitmap.cc
> > @@ -101,13 +101,17 @@ SplashBitmap::SplashBitmap(int widthA, int heightA,
> > int rowPadA,>
> > rowSize += rowPad - 1;
> > rowSize -= rowSize % rowPad;
> >
> > }
> >
> > - data = (SplashColorPtr)gmallocn(rowSize, height);
> > - if (!topDown) {
> > - data += (height - 1) * rowSize;
> > - rowSize = -rowSize;
> > - }
> > - if (alphaA) {
> > - alpha = (Guchar *)gmallocn(width, height);
> > + data = (SplashColorPtr)gmallocn_checkoverflow(rowSize, height);
> > + if (data != NULL) {
> > + if (!topDown) {
> > + data += (height - 1) * rowSize;
> > + rowSize = -rowSize;
> > + }
> > + if (alphaA) {
> > + alpha = (Guchar *)gmallocn(width, height);
> > + } else {
> > + alpha = NULL;
> > + }
> >
> > } else {
> >
> > alpha = NULL;
> >
> > }
> >
> > _______________________________________________
> > poppler mailing list
> > poppler at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/poppler
More information about the poppler
mailing list