iliaa Thu Aug 10 18:34:22 2006 UTC
Modified files: (Branch: PHP_5_1)
/php-src NEWS
/php-src/ext/gd/libgd gd.c gd_gd2.c gd_gif_in.c gd_gif_out.c
Log:
MFH: Fixed bug #38112 (corrupted gif segfaults) (Pierre)
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.563&r2=1.2027.2.564&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.563 php-src/NEWS:1.2027.2.564
--- php-src/NEWS:1.2027.2.563 Thu Aug 10 17:16:35 2006
+++ php-src/NEWS Thu Aug 10 18:34:22 2006
@@ -8,6 +8,7 @@
- Fixed bug #38322 (reading past array in sscanf() leads to arbitary code
execution). (Tony)
- Fixed bug #38125 (undefined reference to spl_dual_it_free_storage). (Marcus)
+- Fixed bug #38112 (corrupted gif segfaults) (Pierre)
- Fixed bug #37587 (var without attribute causes segfault). (Marcus)
- Fixed bug #37576 (FastCGI env (cgi vars) table overflow). (Piotr)
- Fixed bug #37496 (FastCGI output buffer overrun). (Piotr, Dmitry)
http://cvs.php.net/viewvc.cgi/php-src/ext/gd/libgd/gd.c?r1=1.90.2.1&r2=1.90.2.2&diff_format=u
Index: php-src/ext/gd/libgd/gd.c
diff -u php-src/ext/gd/libgd/gd.c:1.90.2.1 php-src/ext/gd/libgd/gd.c:1.90.2.2
--- php-src/ext/gd/libgd/gd.c:1.90.2.1 Fri Sep 30 20:48:05 2005
+++ php-src/ext/gd/libgd/gd.c Thu Aug 10 18:34:22 2006
@@ -2161,7 +2161,7 @@
for (x = 0; (x < w); x++) {
int c = gdImageGetPixel (src, srcX + x,
srcY + y);
if (c != src->transparent) {
- gdImageSetPixel (dst, dstX + x,
dstY + y, gdTrueColor(src->red[c], src->green[c], src->blue[c]));
+ gdImageSetPixel(dst, dstX + x,
dstY + y, gdTrueColorAlpha(src->red[c], src->green[c], src->blue[c],
src->alpha[c]));
}
}
}
http://cvs.php.net/viewvc.cgi/php-src/ext/gd/libgd/gd_gd2.c?r1=1.16.4.1&r2=1.16.4.2&diff_format=u
Index: php-src/ext/gd/libgd/gd_gd2.c
diff -u php-src/ext/gd/libgd/gd_gd2.c:1.16.4.1
php-src/ext/gd/libgd/gd_gd2.c:1.16.4.2
--- php-src/ext/gd/libgd/gd_gd2.c:1.16.4.1 Thu Aug 18 12:54:43 2005
+++ php-src/ext/gd/libgd/gd_gd2.c Thu Aug 10 18:34:22 2006
@@ -430,6 +430,10 @@
gdImagePtr im;
+ if (w<1 || h <1) {
+ return 0;
+ }
+
/* The next few lines are basically copied from gd2CreateFromFile
* we change the file size, so don't want to use the code directly.
* but we do need to know the file size.
http://cvs.php.net/viewvc.cgi/php-src/ext/gd/libgd/gd_gif_in.c?r1=1.5.4.4&r2=1.5.4.5&diff_format=u
Index: php-src/ext/gd/libgd/gd_gif_in.c
diff -u php-src/ext/gd/libgd/gd_gif_in.c:1.5.4.4
php-src/ext/gd/libgd/gd_gif_in.c:1.5.4.5
--- php-src/ext/gd/libgd/gd_gif_in.c:1.5.4.4 Mon May 8 11:56:14 2006
+++ php-src/ext/gd/libgd/gd_gif_in.c Thu Aug 10 18:34:22 2006
@@ -185,18 +185,15 @@
bitPixel = 1<<((buf[8]&0x07)+1);
+ if (!(im = gdImageCreate(imw, imh))) {
+ return 0;
+ }
+ im->interlace = BitSet(buf[8], INTERLACE);
if (! useGlobalColormap) {
- if (ReadColorMap(fd, bitPixel, localColorMap)) {
+ if (ReadColorMap(fd, bitPixel, localColorMap)) {
return 0;
}
- }
-
- if (!(im = gdImageCreate(imw, imh))) {
- return 0;
- }
- im->interlace = BitSet(buf[8], INTERLACE);
- if (! useGlobalColormap) {
ReadImage(im, fd, imw, imh, localColorMap,
BitSet(buf[8], INTERLACE));
/*1.4//imageCount != imageNumber); */
@@ -217,6 +214,10 @@
if (!im) {
return 0;
}
+ if (!im->colorsTotal) {
+ gdImageDestroy(im);
+ return 0;
+ }
/* Check for open colors at the end, so
we can reduce colorsTotal and ultimately
BitsPerPixel */
@@ -507,6 +508,18 @@
int v;
int xpos = 0, ypos = 0, pass = 0;
int i;
+
+ /*
+ ** Initialize the Compression routines
+ */
+ if (! ReadOK(fd,&c,1)) {
+ return;
+ }
+
+ if (c > MAX_LWZ_BITS) {
+ return;
+ }
+
/* Stash the color map into the image */
for (i=0; (i<gdMaxColors); i++) {
im->red[i] = cmap[CM_RED][i];
@@ -516,12 +529,7 @@
}
/* Many (perhaps most) of these colors will remain marked open. */
im->colorsTotal = gdMaxColors;
- /*
- ** Initialize the Compression routines
- */
- if (! ReadOK(fd,&c,1)) {
- return;
- }
+
if (LWZReadByte(fd, TRUE, c) < 0) {
return;
}
http://cvs.php.net/viewvc.cgi/php-src/ext/gd/libgd/gd_gif_out.c?r1=1.1.6.1&r2=1.1.6.2&diff_format=u
Index: php-src/ext/gd/libgd/gd_gif_out.c
diff -u php-src/ext/gd/libgd/gd_gif_out.c:1.1.6.1
php-src/ext/gd/libgd/gd_gif_out.c:1.1.6.2
--- php-src/ext/gd/libgd/gd_gif_out.c:1.1.6.1 Mon Mar 13 21:56:38 2006
+++ php-src/ext/gd/libgd/gd_gif_out.c Thu Aug 10 18:34:22 2006
@@ -265,9 +265,11 @@
int InitCodeSize;
int i;
GifCtx ctx;
+
+ memset(&ctx, 0, sizeof(ctx));
ctx.Interlace = GInterlace;
ctx.in_count = 1;
- memset(&ctx, 0, sizeof(ctx));
+
ColorMapSize = 1 << BitsPerPixel;
RWidth = ctx.Width = GWidth;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php