diff options
author | Benjamin Otte <otte@redhat.com> | 2015-10-12 11:37:13 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2015-10-13 02:56:48 +0200 |
commit | 4a78a60d34e1a1b2f6651df26ba8d37394328c6e (patch) | |
tree | a623491eb2b9acb1d3a68c519c9238aeb4382e18 | |
parent | a094ce2b54620bd585b8aa892d67b6c6ab576366 (diff) | |
download | gdk-pixbuf-4a78a60d34e1a1b2f6651df26ba8d37394328c6e.tar.gz |
tests: Add pixbuf-fail test
pixbuf-fail goes into test-images/fail and loads all the images in
there, checking that a proper error happens during loading.
This is useful for invalid images that cause crashes: Put them in there
after they are fixed.
-rw-r--r-- | tests/Makefile.am | 7 | ||||
-rw-r--r-- | tests/pixbuf-fail.c | 119 |
2 files changed, 126 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index ed1c25c23..7cf9bff55 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -25,6 +25,7 @@ noinst_PROGRAMS += \ test_programs = \ animation \ cve-2015-4491 \ + pixbuf-fail \ pixbuf-icon-serialize \ pixbuf-randomly-modified \ pixbuf-threads \ @@ -89,6 +90,12 @@ pixbuf_dpi_SOURCES = \ test-common.h \ $(NULL) +pixbuf_fail_SOURCES = \ + pixbuf-fail.c \ + test-common.c \ + test-common.h \ + $(NULL) + pixbuf_scale_SOURCES = \ pixbuf-scale.c \ test-common.c \ diff --git a/tests/pixbuf-fail.c b/tests/pixbuf-fail.c new file mode 100644 index 000000000..0e37c2da0 --- /dev/null +++ b/tests/pixbuf-fail.c @@ -0,0 +1,119 @@ +/* -*- Mode: C; c-basic-offset: 2; -*- */ +/* GdkPixbuf library - test loaders + * + * Copyright (C) 2015 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + * + * Author: Benjamin Otte + */ + +#include "config.h" + +#include <gdk-pixbuf/gdk-pixbuf.h> + +#include "test-common.h" + +static void +test_fail (gconstpointer data) +{ + GdkPixbufLoader *loader; + GError *error = NULL; + GFile *file; + guchar *contents; + gsize i, contents_length; + char *filename, *content_type, *mime_type; + gboolean success; + + file = G_FILE (data); + if (!file_supported (file)) + { + g_test_skip ("format not supported"); + return; + } + + filename = g_file_get_path (file); + + success = g_file_load_contents (file, NULL, (gchar **) &contents, &contents_length, NULL, &error); + g_assert_no_error (error); + g_assert (success); + + content_type = g_content_type_guess (filename, contents, contents_length, NULL); + mime_type = g_content_type_get_mime_type (content_type); + g_assert (mime_type); + + loader = gdk_pixbuf_loader_new_with_mime_type (mime_type, &error); + g_assert_no_error (error); + g_assert (loader != NULL); + + for (i = 0; i < contents_length; i++) + { + success = gdk_pixbuf_loader_write (loader, &contents[i], 1, &error); + if (!success) + { + g_assert (error); + g_clear_error (&error); + goto out; + } + g_assert_no_error (error); + } + + success = gdk_pixbuf_loader_close (loader, &error); + g_assert (!success); + g_assert (error); + g_clear_error (&error); + +out: + g_free (mime_type); + g_free (content_type); + g_free (contents); + g_object_unref (loader); + g_free (filename); +} + +int +main (int argc, char **argv) +{ + + g_test_init (&argc, &argv, NULL); + + if (argc < 2) + { + GFile *dir; + gchar *test_images; + + test_images = g_build_filename (g_test_get_dir (G_TEST_DIST), "test-images/fail", NULL); + dir = g_file_new_for_path (test_images); + + add_test_for_all_images ("/pixbuf/fail", dir, dir, test_fail, NULL); + + g_object_unref (dir); + g_free (test_images); + } + else + { + guint i; + + for (i = 1; i < argc; i++) + { + GFile *file = g_file_new_for_commandline_arg (argv[i]); + + add_test_for_all_images ("/pixbuf/fail", NULL, file, test_fail, NULL); + + g_object_unref (file); + } + } + + return g_test_run (); +} |