From: ellson Date: Fri, 7 Jan 2011 16:13:21 +0000 (+0000) Subject: fix for bug #2102 X-Git-Tag: LAST_LIBGRAPH~32^2~1117 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3c9db39e23b43b1bc9622866f7761a3ea0d376e1;p=graphviz fix for bug #2102 Apparently cairo doesn't leave a valid surface if nothing was ever written to it. --- diff --git a/plugin/gd/gvdevice_gd.c b/plugin/gd/gvdevice_gd.c index e22bc8943..a973786cd 100644 --- a/plugin/gd/gvdevice_gd.c +++ b/plugin/gd/gvdevice_gd.c @@ -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; }