diff options
author | Ilia Alshanetsky <iliaa@php.net> | 2002-12-03 15:43:17 +0000 |
---|---|---|
committer | Ilia Alshanetsky <iliaa@php.net> | 2002-12-03 15:43:17 +0000 |
commit | b08f247f321f15c936e77585b4b475560f8dac5b (patch) | |
tree | e04c6fcd9fa57d2567a166aa56827bc53f23f57e | |
parent | 242ddba326e759f61b4f28e05f8944c3dd7cd0aa (diff) | |
download | php-git-b08f247f321f15c936e77585b4b475560f8dac5b.tar.gz |
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.
-rw-r--r-- | ext/gd/libgd/gd_gd2.c | 12 | ||||
-rw-r--r-- | 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 eab50ad9df..10156bfb94 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 4671f83cc0..8d5effb5a2 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]]; } |