[poppler] splash/SplashBitmap.cc splash/Splash.cc
Thomas Freitag
Thomas.Freitag at kabelmail.de
Mon Jun 25 00:56:01 PDT 2012
Hi Albert!
This commit probably fixes the abort, but I fear the PDF will not be
rendered, does it? 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/poppler/attachments/20120625/d9207d5a/attachment.html>
More information about the poppler
mailing list