adium.1-3: ee77fb52: Apply Mark's "libpurple_fix_icq_remote_c...
zacw at adiumx.com
zacw at adiumx.com
Fri Oct 16 10:25:45 EDT 2009
-----------------------------------------------------------------
Revision: ee77fb52bee587b4d2edaac3302fc9f698627825
Ancestor: c0f585e39e1d50efe59a4a10347731b3a2cd7e20
Author: zacw at adiumx.com
Date: 2009-10-16T14:22:38
Branch: im.pidgin.adium.1-3
URL: http://d.pidgin.im/viewmtn/revision/info/ee77fb52bee587b4d2edaac3302fc9f698627825
Modified files:
libpurple/protocols/oscar/oscar.c
ChangeLog:
Apply Mark's "libpurple_fix_icq_remote_crash.diff".
-------------- next part --------------
============================================================
--- libpurple/protocols/oscar/oscar.c 9a8a780ae397645361ff064973524d4e9ee1449d
+++ libpurple/protocols/oscar/oscar.c 26149590cddb9ce8a5255a026e45a127a8d0da58
@@ -2795,25 +2795,46 @@ incomingim_chan4(OscarData *od, FlapConn
gchar **text;
text = g_strsplit(args->msg, "\376", 0);
if (text) {
- num = 0;
- for (i=0; i<strlen(text[0]); i++)
- num = num*10 + text[0][i]-48;
- for (i=0; i<num; i++) {
- struct name_data *data = g_new(struct name_data, 1);
- gchar *message = g_strdup_printf(_("ICQ user %u has sent you a buddy: %s (%s)"), args->uin, text[i*2+2], text[i*2+1]);
- data->gc = gc;
- data->name = g_strdup(text[i*2+1]);
- data->nick = g_strdup(text[i*2+2]);
+ /* Read the number of contacts that we were sent */
+ errno = 0;
+ num = strtoul(text[0], NULL, 10);
- purple_request_action(gc, NULL, message,
- _("Do you want to add this buddy "
- "to your buddy list?"),
- PURPLE_DEFAULT_ACTION_NONE,
- purple_connection_get_account(gc), data->name, NULL,
- data, 2,
- _("_Add"), G_CALLBACK(purple_icq_buddyadd),
- _("_Decline"), G_CALLBACK(oscar_free_name_data));
- g_free(message);
+ if (num > 0 && errno == 0) {
+ for (i=0; i<num; i++) {
+ struct name_data *data;
+ gchar *message;
+
+ if (!text[i*2 + 1] || !text[i*2 + 2]) {
+ /* We're missing the contact name or nickname. Bail out. */
+ gchar *tmp = g_strescape(args->msg, NULL);
+ purple_debug_error("oscar", "Unknown syntax parsing "
+ "ICQ buddies. args->msg=%s\n", tmp);
+ g_free(tmp);
+ break;
+ }
+
+ message = g_strdup_printf(_("ICQ user %u has sent you a buddy: %s (%s)"), args->uin, text[i*2+2], text[i*2+1]);
+
+ data = g_new(struct name_data, 1);
+ data->gc = gc;
+ data->name = g_strdup(text[i*2+1]);
+ data->nick = g_strdup(text[i*2+2]);
+
+ purple_request_action(gc, NULL, message,
+ _("Do you want to add this buddy "
+ "to your buddy list?"),
+ PURPLE_DEFAULT_ACTION_NONE,
+ purple_connection_get_account(gc), data->name, NULL,
+ data, 2,
+ _("_Add"), G_CALLBACK(purple_icq_buddyadd),
+ _("_Decline"), G_CALLBACK(oscar_free_name_data));
+ g_free(message);
+ }
+ } else {
+ gchar *tmp = g_strescape(args->msg, NULL);
+ purple_debug_error("oscar", "Unknown syntax parsing "
+ "ICQ buddies. args->msg=%s\n", tmp);
+ g_free(tmp);
}
g_strfreev(text);
}
More information about the Commits
mailing list