diff options
author | Marti Raudsepp <marti@juffo.org> | 2013-11-20 23:52:06 +0200 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2013-11-20 22:05:31 +0000 |
commit | 7946c7cfe5047beb252be73d98c34f29db85fad1 (patch) | |
tree | bb25b0bbcc8f606542fb4aead4181c319d0df646 /lib | |
parent | b507175603645acf3cfb2ea2a47df38a00c65cfd (diff) | |
download | colord-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.c | 1 | ||||
-rw-r--r-- | lib/colord/cd-test-private.c | 27 |
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); |