]> granicus.if.org Git - php/commitdiff
Fixed a crash that occurs during the last step of png/jpeg -> gd2 -> png/jpeg
authorIlia Alshanetsky <iliaa@php.net>
Tue, 3 Dec 2002 15:43:17 +0000 (15:43 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Tue, 3 Dec 2002 15:43:17 +0000 (15:43 +0000)
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
ext/gd/libgd/gd_png.c

index eab50ad9df03d69667a9606a1427fa0695751092..10156bfb946cf896987b93ba1514fd4359575538 100644 (file)
@@ -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];
                        }
                    };
                }
index 4671f83cc0ed252ed7998024506cde2962c41344..8d5effb5a2fff42dce56f5e432a9a7382c2b28d3 100644 (file)
@@ -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]];
            }