[poppler] splash/SplashBitmap.cc splash/Splash.cc
Thomas Freitag
Thomas.Freitag at kabelmail.de
Tue Jun 26 00:40:27 PDT 2012
Am 25.06.2012 21:54, schrieb Albert Astals Cid:
> 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
I'm wondering about that: if I render it with pdftoppm, 150 dpi, it
breaks on page 4 with "Bogus memory allocation size" and I got a white
page with Your patch only, but it renders also page 4 with my patch on top.
(Tested both on Windows 32 bit and Unbuntu 64 bit!)
Cheers,
Thomas
>
> 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
> _______________________________________________
> poppler mailing list
> poppler at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/poppler
>
> .
>
More information about the poppler
mailing list