# HG changeset patch # User Mark Doliner # Date 1291257352 0 # Node ID 873cd5e068c47c955778c6a477dba3b9c6aa85e6 # Parent 1203778744d03b289cd4be60a2c16a25d71c23f1 I tested with AIM 7.2.6.1 and ICQ 7.2 build 3159 and both of them send no status message to indicate that the status message has been cleared. So it really seems like this comment and this behavior is incorrect. This fixes #12988. I haven't noticed any side effects yet. The side effect I'm worried about is that maybe we'll clear someone's status message when we shouldn't (because we receive a userinfo packet without a status message for whatever reason) diff -r 1203778744d0 -r 873cd5e068c4 libpurple/protocols/oscar/oscar.c --- a/libpurple/protocols/oscar/oscar.c Tue Nov 30 06:06:14 2010 +0000 +++ b/libpurple/protocols/oscar/oscar.c Thu Dec 02 02:35:52 2010 +0000 @@ -1366,7 +1366,7 @@ const char *status_id; va_list ap; aim_userinfo_t *info; - char *message = NULL; + char *message; char *itmsurl = NULL; gc = od->gc; @@ -1453,16 +1453,13 @@ purple_prpl_got_user_status_deactive(account, info->bn, OSCAR_STATUS_ID_MOBILE); } - /* Empty status means we should unset the status message. NULL status means we should keep it from the previous active status. - * Same goes for itmsurl (which is available only for the "available" status). - */ - if (info->status != NULL) { - message = (info->status_len > 0) ? oscar_encoding_to_utf8(info->status_encoding, info->status, info->status_len) : NULL; - } else if (previous_status != NULL) { - message = g_strdup(purple_status_get_attr_string(previous_status, "message")); - } + message = (info->status && info->status_len > 0) + ? oscar_encoding_to_utf8(info->status_encoding, info->status, info->status_len) + : NULL; if (strcmp(status_id, OSCAR_STATUS_ID_AVAILABLE) == 0) { + /* TODO: If itmsurl is NULL, does that mean the URL has been + cleared? Or does it mean the URL should remain unchanged? */ if (info->itmsurl != NULL) { itmsurl = (info->itmsurl_len > 0) ? oscar_encoding_to_utf8(info->itmsurl_encoding, info->itmsurl, info->itmsurl_len) : NULL; } else if (previous_status != NULL && purple_status_is_available(previous_status)) {