# HG changeset patch # User Luke Schierer # Date 1192818630 0 # Node ID 58a57a0ca80766180131afdc24bdf1eb869577ba # Parent 53afc5cce143193cf63e37502f5017d9d33abc27 applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6 through a976c1dbb1135583dc67c67af14aa684fd4e18ee applied changes from a976c1dbb1135583dc67c67af14aa684fd4e18ee through 62ac0eb5b2ae2fda530b7230c8a903cc5ecd4513 diff -r 53afc5cce143 -r 58a57a0ca807 libpurple/protocols/jabber/usermood.c --- a/libpurple/protocols/jabber/usermood.c Fri Oct 19 18:28:33 2007 +0000 +++ b/libpurple/protocols/jabber/usermood.c Fri Oct 19 18:30:30 2007 +0000 @@ -26,6 +26,7 @@ #include #include "internal.h" #include "request.h" +#include "debug.h" static const char *moodstrings[] = { "afraid", @@ -145,9 +146,26 @@ } static void do_mood_set_from_fields(PurpleConnection *gc, PurpleRequestFields *fields) { - JabberStream *js = gc->proto_data; - - jabber_mood_set(js, moodstrings[purple_request_fields_get_choice(fields, "mood")], purple_request_fields_get_string(fields, "text")); + JabberStream *js; + int max_mood_idx; + int selected_mood = purple_request_fields_get_choice(fields, "mood"); + + if (!PURPLE_CONNECTION_IS_VALID(gc)) { + purple_debug_error("jabber", "Unable to set mood; account offline.\n"); + return; + } + + js = gc->proto_data; + + /* This is ugly, but protects us from unexpected values. */ + for (max_mood_idx = 0; moodstrings[max_mood_idx]; max_mood_idx++); + + if (selected_mood < 0 || selected_mood >= max_mood_idx) { + purple_debug_error("jabber", "Invalid mood index (%d) selected.\n", selected_mood); + return; + } + + jabber_mood_set(js, moodstrings[selected_mood], purple_request_fields_get_string(fields, "text")); } static void do_mood_set_mood(PurplePluginAction *action) { diff -r 53afc5cce143 -r 58a57a0ca807 libpurple/util.c --- a/libpurple/util.c Fri Oct 19 18:28:33 2007 +0000 +++ b/libpurple/util.c Fri Oct 19 18:30:30 2007 +0000 @@ -2565,15 +2565,14 @@ filename_full = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", user_dir, filename); - ret = purple_util_write_data_to_file_absolute(filename_full, - data,size); + ret = purple_util_write_data_to_file_absolute(filename_full, data, size); g_free(filename_full); return ret; } gboolean -purple_util_write_data_to_file_absolute(const char *filename_full, const char *data, size_t size) +purple_util_write_data_to_file_absolute(const char *filename_full, const char *data, gssize size) { gchar *filename_temp; FILE *file; diff -r 53afc5cce143 -r 58a57a0ca807 libpurple/util.h --- a/libpurple/util.h Fri Oct 19 18:28:33 2007 +0000 +++ b/libpurple/util.h Fri Oct 19 18:30:30 2007 +0000 @@ -607,7 +607,7 @@ * */ gboolean -purple_util_write_data_to_file_absolute(const char *filename_full, const char *data, size_t size); +purple_util_write_data_to_file_absolute(const char *filename_full, const char *data, gssize size); /** * Read the contents of a given file and parse the results into an