summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMarti Raudsepp <marti@juffo.org>2013-11-20 23:52:06 +0200
committerRichard Hughes <richard@hughsie.com>2013-11-20 22:05:31 +0000
commit7946c7cfe5047beb252be73d98c34f29db85fad1 (patch)
treebb25b0bbcc8f606542fb4aead4181c319d0df646 /lib
parentb507175603645acf3cfb2ea2a47df38a00c65cfd (diff)
downloadcolord-7946c7cfe5047beb252be73d98c34f29db85fad1.tar.gz
Don't crash with zero-sized ICC file
Code already exists to handle corrupt files, but empty files caused an assertion to fail instead. Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=709233 Signed-off-by: Richard Hughes <richard@hughsie.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/colord/cd-icc.c1
-rw-r--r--lib/colord/cd-test-private.c27
2 files changed, 27 insertions, 1 deletions
diff --git a/lib/colord/cd-icc.c b/lib/colord/cd-icc.c
index 6b18c8b..e2b5047 100644
--- a/lib/colord/cd-icc.c
+++ b/lib/colord/cd-icc.c
@@ -1209,7 +1209,6 @@ cd_icc_load_data (CdIcc *icc,
g_return_val_if_fail (CD_IS_ICC (icc), FALSE);
g_return_val_if_fail (data != NULL, FALSE);
- g_return_val_if_fail (data_len != 0, FALSE);
g_return_val_if_fail (priv->lcms_profile == NULL, FALSE);
/* ensure we have the header */
diff --git a/lib/colord/cd-test-private.c b/lib/colord/cd-test-private.c
index 4d624a6..6a3b6ff 100644
--- a/lib/colord/cd-test-private.c
+++ b/lib/colord/cd-test-private.c
@@ -989,6 +989,32 @@ colord_icc_characterization_func (void)
}
static void
+colord_icc_empty_func (void)
+{
+ CdIcc *icc;
+ GError *error = NULL;
+ GFile *file;
+ gboolean ret;
+ gchar *filename;
+
+ /* load source file */
+ icc = cd_icc_new ();
+ filename = cd_test_get_filename ("empty.icc");
+ file = g_file_new_for_path (filename);
+ ret = cd_icc_load_file (icc,
+ file,
+ CD_ICC_LOAD_FLAGS_NONE,
+ NULL,
+ &error);
+ g_assert_error (error, CD_ICC_ERROR, CD_ICC_ERROR_FAILED_TO_PARSE);
+ g_assert (!ret);
+ g_error_free (error);
+ g_free (filename);
+ g_object_unref (file);
+ g_object_unref (icc);
+}
+
+static void
colord_icc_save_func (void)
{
CdIcc *icc;
@@ -1538,6 +1564,7 @@ main (int argc, char **argv)
g_test_add_func ("/colord/icc{edid}", colord_icc_edid_func);
g_test_add_func ("/colord/icc{characterization}", colord_icc_characterization_func);
g_test_add_func ("/colord/icc{save}", colord_icc_save_func);
+ g_test_add_func ("/colord/icc{empty}", colord_icc_empty_func);
g_test_add_func ("/colord/icc-store", colord_icc_store_func);
g_test_add_func ("/colord/buffer", colord_buffer_func);
g_test_add_func ("/colord/enum", colord_enum_func);