]> granicus.if.org Git - php/commitdiff
- do not try to use the global color map when none was found (Nuno, Pierre)
authorPierre Joye <pajoye@php.net>
Wed, 4 Apr 2007 11:40:11 +0000 (11:40 +0000)
committerPierre Joye <pajoye@php.net>
Wed, 4 Apr 2007 11:40:11 +0000 (11:40 +0000)
- free im on error

ext/gd/libgd/gd_gif_in.c

index 16ccc796c153a13c92e23383ec10f77ba1b953cf..8ee77b02e88847e86323c53529f64762fc23a8e5 100644 (file)
@@ -142,7 +142,7 @@ gdImagePtr gdImageCreateFromGifCtx(gdIOCtxPtr fd) /* {{{ */
        /*1.4//int             imageCount = 0; */
 
        int ZeroDataBlock = FALSE;
-
+       int haveGlobalColormap;
        gdImagePtr im = 0;
 
        /*1.4//imageNumber = 1; */
@@ -174,11 +174,13 @@ gdImagePtr gdImageCreateFromGifCtx(gdIOCtxPtr fd) /* {{{ */
        screen_width = imw = LM_to_uint(buf[0],buf[1]);
        screen_height = imh = LM_to_uint(buf[2],buf[3]);
 
-       if (BitSet(buf[4], LOCALCOLORMAP)) {    /* Global Colormap */
+       haveGlobalColormap = BitSet(buf[4], LOCALCOLORMAP);    /* Global Colormap */
+       if (haveGlobalColormap) {
                if (ReadColorMap(fd, BitPixel, ColorMap)) {
                        return 0;
                }
        }
+
        for (;;) {
                int top, left;
                int width, height;
@@ -227,13 +229,18 @@ gdImagePtr gdImageCreateFromGifCtx(gdIOCtxPtr fd) /* {{{ */
                        return 0;
                }
                im->interlace = BitSet(buf[8], INTERLACE);
-               if (! useGlobalColormap) {
+               if (!useGlobalColormap) {
                        if (ReadColorMap(fd, bitPixel, localColorMap)) { 
+                               gdImageDestroy(im);
                                return 0;
                        }
                        ReadImage(im, fd, width, height, localColorMap, 
                                        BitSet(buf[8], INTERLACE), &ZeroDataBlock);
                } else {
+                       if (!haveGlobalColormap) {
+                               gdImageDestroy(im);
+                               return 0;
+                       }
                        ReadImage(im, fd, width, height,
                                                ColorMap, 
                                                BitSet(buf[8], INTERLACE), &ZeroDataBlock);