# HG changeset patch # User Richard Laager # Date 1177817704 0 # Node ID 898019538f44dff140275422f3dd08fdf0fad66a # Parent 36981d83b20c6da0e6e47d68bdbd34041dc284c5 Add more error checking to the buddy icon migration code. diff -r 36981d83b20c -r 898019538f44 libpurple/buddyicon.c --- a/libpurple/buddyicon.c Sun Apr 29 02:49:23 2007 +0000 +++ b/libpurple/buddyicon.c Sun Apr 29 03:35:04 2007 +0000 @@ -912,9 +912,19 @@ FILE *file; char *new_filename; - if (!read_icon_file(path, &icon_data, &icon_len) || - icon_data == NULL || icon_len <= 0) + if (!read_icon_file(path, &icon_data, &icon_len)) { + g_free(path); + delete_buddy_icon_settings(node, setting_name); + return; + } + + if (icon_data == NULL || icon_len <= 0) + { + /* This really applies to the icon_len check. + * icon_data should never be NULL if + * read_icon_file() returns TRUE. */ + purple_debug_error("buddyicon", "Empty buddy icon file: %s\n", path); delete_buddy_icon_settings(node, setting_name); g_free(path); return; @@ -925,8 +935,11 @@ new_filename = purple_buddy_icon_data_calculate_filename(icon_data, icon_len); if (new_filename == NULL) { + purple_debug_error("buddyicon", + "New icon filename is NULL. This should never happen! " + "The old filename was: %s\n", path); delete_buddy_icon_settings(node, setting_name); - return; + g_return_if_reached(); } path = g_build_filename(dirname, new_filename, NULL); @@ -992,7 +1005,7 @@ } else { - /* If the icon is gone, drop the setting... */ + purple_debug_error("buddyicon", "Old icon file doesn't exist: %s\n", path); delete_buddy_icon_settings(node, setting_name); g_free(path); }