changeset 10563:3e2cd3fe8897

[gaim-migrate @ 11944] 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. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Tue, 01 Feb 2005 05:19:27 +0000
parents e06da39b467c
children cdeb727d1de3
files src/protocols/oscar/locate.c src/protocols/oscar/oscar.c
diffstat 2 files changed, 15 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/protocols/oscar/locate.c	Tue Feb 01 05:02:40 2005 +0000
+++ b/src/protocols/oscar/locate.c	Tue Feb 01 05:19:27 2005 +0000
@@ -755,7 +755,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	Tue Feb 01 05:02:40 2005 +0000
+++ b/src/protocols/oscar/oscar.c	Tue Feb 01 05:19:27 2005 +0000
@@ -3023,12 +3023,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) {