gaim/gaim

654e33c9fb7c
Parents fafc3505dda5
Children b6b253ece9be
Fix a problem Justin Wood noticed and supplied sf patch 920581 to fix

My fix is slightly difference.

The problem was that, if an iChat user had an available message up,
then they changed their buddy icon, Gaim would stop showing the
available message for the person.
--- a/src/protocols/oscar/locate.c Mon Jan 31 23:54:25 2005 -0500
+++ b/src/protocols/oscar/locate.c Tue Feb 01 00:18:35 2005 -0500
@@ -743,7 +743,7 @@
} break;
case 0x0002: { /* An available message */
- if (length2 > 4) {
+ if (length2 >= 4) {
free(outinfo->avail);
outinfo->avail_len = aimbs_get16(bs);
outinfo->avail = aimbs_getstr(bs, outinfo->avail_len);
--- a/src/protocols/oscar/oscar.c Mon Jan 31 23:54:25 2005 -0500
+++ b/src/protocols/oscar/oscar.c Tue Feb 01 00:18:35 2005 -0500
@@ -2965,12 +2965,21 @@
bi->ico_informed = FALSE;
bi->ipaddr = info->icqinfo.ipaddr;
- /* Available message stuff */
- free(bi->availmsg);
+ /*
+ * Handle the available message. If info->avail is NULL then the user
+ * may or may not have an available message, so don't do anything. If
+ * info->avail is set to the empty string, then the user's client DOES
+ * support available messages and the user DOES NOT have one set.
+ * Otherwise info->avail contains the available message.
+ */
if (info->avail != NULL)
- bi->availmsg = oscar_encoding_to_utf8(info->avail_encoding, info->avail, info->avail_len);
- else
- bi->availmsg = NULL;
+ {
+ free(bi->availmsg);
+ if (info->avail[0] != '\0')
+ bi->availmsg = oscar_encoding_to_utf8(info->avail_encoding, info->avail, info->avail_len);
+ else
+ bi->availmsg = NULL;
+ }
/* Server stored icon stuff */
if (info->iconcsumlen) {
@@ -5704,10 +5713,9 @@
{
OscarData *od = (OscarData *)gc->proto_data;
+ oscar_set_away_aim(gc, od, state, message);
if (od->icq)
oscar_set_away_icq(gc, od, state, message);
- else
- oscar_set_away_aim(gc, od, state, message);
return;
}