From b08f247f321f15c936e77585b4b475560f8dac5b Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Tue, 3 Dec 2002 15:43:17 +0000 Subject: [PATCH] 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. --- ext/gd/libgd/gd_gd2.c | 12 ++++++------ ext/gd/libgd/gd_png.c | 26 +++----------------------- 2 files changed, 9 insertions(+), 29 deletions(-) diff --git a/ext/gd/libgd/gd_gd2.c b/ext/gd/libgd/gd_gd2.c index eab50ad9df0..10156bfb946 100644 --- a/ext/gd/libgd/gd_gd2.c +++ b/ext/gd/libgd/gd_gd2.c @@ -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]; } }; } diff --git a/ext/gd/libgd/gd_png.c b/ext/gd/libgd/gd_png.c index 4671f83cc0e..8d5effb5a2f 100644 --- a/ext/gd/libgd/gd_png.c +++ b/ext/gd/libgd/gd_png.c @@ -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]]; }