summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2015-10-12 15:57:36 +0200
committerBenjamin Otte <otte@redhat.com>2015-10-13 02:56:48 +0200
commitaa4d63da62c4596eb6b810838c3d10b70289caaf (patch)
treecbb36085fdc0dae5995b10097ddcb11226eaebdc
parent4a78a60d34e1a1b2f6651df26ba8d37394328c6e (diff)
downloadgdk-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.c22
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