mirror of
https://github.com/php/php-src.git
synced 2024-11-25 10:54:15 +08:00
Fixed a crash that occurs during the last step of png/jpeg -> gd2 -> png/jpeg
conversion. The same crash still occures with png/jpeg -> gd -> png/jpeg, because apparently gd format cannot handle truecolor images. Turned off debug messages inside gd_gd2.c.
This commit is contained in:
parent
242ddba326
commit
b08f247f32
@ -25,8 +25,8 @@
|
||||
|
||||
/* Use this for commenting out debug-print statements. */
|
||||
/* Just use the first '#define' to allow all the prints... */
|
||||
#define GD2_DBG(s) (s)
|
||||
//#define GD2_DBG(s)
|
||||
/* #define GD2_DBG(s) (s) */
|
||||
#define GD2_DBG(s)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@ -184,7 +184,7 @@ _gd2CreateFromFile (gdIOCtxPtr in, int *sx, int *sy,
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
im = gdImageCreate (*sx, *sy);
|
||||
im = gdImageCreateTrueColor(*sx, *sy);
|
||||
if (im == NULL)
|
||||
{
|
||||
GD2_DBG(php_gd_error("Could not create gdImage\n"));
|
||||
@ -393,7 +393,7 @@ gdImageCreateFromGd2Ctx (gdIOCtxPtr in)
|
||||
int r = chunkBuf[chunkPos++] << 16;
|
||||
int g = chunkBuf[chunkPos++] << 8;
|
||||
int b = chunkBuf[chunkPos++];
|
||||
im->pixels[y][x] = a + r + g + b;
|
||||
im->tpixels[y][x] = a + r + g + b;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -818,10 +818,10 @@ _gdImageGd2 (gdImagePtr im, gdIOCtx * out, int cs, int fmt)
|
||||
{
|
||||
for (x = xlo; x < xhi; x++)
|
||||
{
|
||||
int p = im->pixels[y][x];
|
||||
GD2_DBG(php_gd_error("%d...",x));
|
||||
if (im->trueColor)
|
||||
{
|
||||
int p = im->tpixels[y][x];
|
||||
chunkData[chunkLen++] = gdTrueColorGetAlpha (p);
|
||||
chunkData[chunkLen++] = gdTrueColorGetRed (p);
|
||||
chunkData[chunkLen++] = gdTrueColorGetGreen (p);
|
||||
@ -829,7 +829,7 @@ _gdImageGd2 (gdImagePtr im, gdIOCtx * out, int cs, int fmt)
|
||||
}
|
||||
else
|
||||
{
|
||||
chunkData[chunkLen++] = p;
|
||||
chunkData[chunkLen++] = im->pixels[y][x];
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -667,20 +667,10 @@ gdImagePngCtx (gdImagePtr im, gdIOCtx * outfile)
|
||||
/* Our little 7-bit alpha channel trick costs us a bit here. */
|
||||
png_bytep *row_pointers;
|
||||
row_pointers = gdMalloc (sizeof (png_bytep) * height);
|
||||
if (row_pointers == NULL)
|
||||
{
|
||||
php_gd_error("gd-png error: unable to allocate row_pointers\n");
|
||||
}
|
||||
for (j = 0; j < height; ++j)
|
||||
{
|
||||
int bo = 0;
|
||||
if ((row_pointers[j] = (png_bytep) gdMalloc (width * channels)) == NULL)
|
||||
{
|
||||
php_gd_error("gd-png error: unable to allocate rows\n");
|
||||
for (i = 0; i < j; ++i)
|
||||
gdFree (row_pointers[i]);
|
||||
return;
|
||||
}
|
||||
row_pointers[j] = (png_bytep) gdMalloc (width * channels);
|
||||
for (i = 0; i < width; ++i)
|
||||
{
|
||||
unsigned char a;
|
||||
@ -714,20 +704,10 @@ gdImagePngCtx (gdImagePtr im, gdIOCtx * outfile)
|
||||
{
|
||||
png_bytep *row_pointers;
|
||||
row_pointers = gdMalloc (sizeof (png_bytep) * height);
|
||||
if (row_pointers == NULL)
|
||||
{
|
||||
php_gd_error("gd-png error: unable to allocate row_pointers\n");
|
||||
}
|
||||
for (j = 0; j < height; ++j)
|
||||
{
|
||||
if ((row_pointers[j] = (png_bytep) gdMalloc (width)) == NULL)
|
||||
{
|
||||
php_gd_error("gd-png error: unable to allocate rows\n");
|
||||
for (i = 0; i < j; ++i)
|
||||
gdFree (row_pointers[i]);
|
||||
return;
|
||||
}
|
||||
for (i = 0; i < width; ++i)
|
||||
row_pointers[j] = (png_bytep) gdMalloc (width);
|
||||
for (i = 0; i < width; ++i)
|
||||
row_pointers[j][i] = mapping[im->pixels[j][i]];
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user