diff options
author | Benjamin Otte <otte@redhat.com> | 2015-10-12 15:57:36 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2015-10-13 02:56:48 +0200 |
commit | aa4d63da62c4596eb6b810838c3d10b70289caaf (patch) | |
tree | cbb36085fdc0dae5995b10097ddcb11226eaebdc | |
parent | 4a78a60d34e1a1b2f6651df26ba8d37394328c6e (diff) | |
download | gdk-pixbuf-aa4d63da62c4596eb6b810838c3d10b70289caaf.tar.gz |
tga: Error on incomplete image
Previously, we would silently ignore the case where the image didn't
have enough pixels.
That is not a good idea, in particular when we haven't even read a
header.
-rw-r--r-- | gdk-pixbuf/io-tga.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/gdk-pixbuf/io-tga.c b/gdk-pixbuf/io-tga.c index 7500359f6..13f8d8184 100644 --- a/gdk-pixbuf/io-tga.c +++ b/gdk-pixbuf/io-tga.c @@ -683,27 +683,29 @@ static gboolean gdk_pixbuf__tga_load_increment(gpointer data, static gboolean gdk_pixbuf__tga_stop_load(gpointer data, GError **err) { TGAContext *ctx = (TGAContext *) data; - g_return_val_if_fail(ctx != NULL, FALSE); + gboolean result = TRUE; + + g_return_val_if_fail (ctx != NULL, FALSE); - if (ctx->pbuf) + if (ctx->pbuf == NULL || tga_pixels_remaining (ctx)) { - TGAColor transparent_black = { 0, 0, 0, 0 }; - gsize remaining; + g_set_error_literal (err, + GDK_PIXBUF_ERROR, + GDK_PIXBUF_ERROR_CORRUPT_IMAGE, + _("TGA image was truncated or incomplete.")); - for (remaining = tga_pixels_remaining (ctx); remaining; remaining--) - { - tga_write_pixel (ctx, &transparent_black); - } + result = FALSE; } g_free (ctx->hdr); if (ctx->cmap) colormap_free (ctx->cmap); if (ctx->pbuf) - g_object_unref (ctx->pbuf); + g_object_unref (ctx->pbuf); gdk_pixbuf_buffer_queue_unref (ctx->input); g_free (ctx); - return TRUE; + + return result; } #ifndef INCLUDE_tga |