]> granicus.if.org Git - graphviz/commitdiff
fix for bug #2102
authorellson <devnull@localhost>
Fri, 7 Jan 2011 16:13:21 +0000 (16:13 +0000)
committerellson <devnull@localhost>
Fri, 7 Jan 2011 16:13:21 +0000 (16:13 +0000)
Apparently cairo doesn't leave a valid surface if nothing was ever written to it.

plugin/gd/gvdevice_gd.c

index e22bc89431a683b6272321ea3d4619293b8c612f..a973786cd921a09101b0f7823e443aa437724ab1 100644 (file)
@@ -85,15 +85,17 @@ static void gd_format(GVJ_t * job)
     switch (job->device.id) {
 #ifdef HAVE_GD_PNG
     case FORMAT_PNG:
-        for (y = 0; y < height; y++) {
-            for (x = 0; x < width; x++) {
-                color = *data++;
-               /* gd's max alpha is 127 */
-               /*   so right-shift 25 to lose lsb of alpha */
-               alpha = (color >> 25) & 0x7f;
-               im->tpixels[y][x] = (color & 0xffffff) | ((0x7f - alpha) << 24);
-           }
-        }
+       if (data) {
+            for (y = 0; y < height; y++) {
+                for (x = 0; x < width; x++) {
+                    color = *data++;
+                   /* gd's max alpha is 127 */
+                   /*   so right-shift 25 to lose lsb of alpha */
+                   alpha = (color >> 25) & 0x7f;
+                   im->tpixels[y][x] = (color & 0xffffff) | ((0x7f - alpha) << 24);
+               }
+            }
+       }
         break;
 #endif
     default:
@@ -102,18 +104,20 @@ static void gd_format(GVJ_t * job)
 
         gdImageColorTransparent(im, TRANSPARENT);
         gdImageAlphaBlending(im, FALSE);
-        for (y = 0; y < height; y++) {
-            for (x = 0; x < width; x++) {
-                color = *data++;
-               /* gd's max alpha is 127 */
-               /*   so right-shift 25 to lose lsb of alpha */
-               if ((alpha = (color >> 25) & 0x7f) >= 0x20)
-                   /* if not > 75% transparent */
-                   im->tpixels[y][x] = (color & 0xffffff) | ((0x7f - alpha) << 24);
-               else
-                   im->tpixels[y][x] = TRANSPARENT;
-           }
-        }
+       if (data) {
+            for (y = 0; y < height; y++) {
+                for (x = 0; x < width; x++) {
+                    color = *data++;
+                   /* gd's max alpha is 127 */
+                   /*   so right-shift 25 to lose lsb of alpha */
+                   if ((alpha = (color >> 25) & 0x7f) >= 0x20)
+                       /* if not > 75% transparent */
+                       im->tpixels[y][x] = (color & 0xffffff) | ((0x7f - alpha) << 24);
+                   else
+                       im->tpixels[y][x] = TRANSPARENT;
+               }
+            }
+       }
         break;
     }