--- a/libpurple/protocols/yahoo/yahoochat.c Mon Jan 20 07:39:26 2014 +0530 +++ b/libpurple/protocols/yahoo/yahoochat.c Mon Jan 20 00:02:17 2014 -0800 @@ -156,15 +156,25 @@ room = yahoo_string_decode(gc, pair->value, FALSE); break; case 50: /* inviter */ - who = pair->value; - g_string_append_printf(members, "%s\n", who); + if (g_utf8_validate(pair->value, -1, NULL)) { + who = pair->value; + g_string_append_printf(members, "%s\n", who); + } else { + purple_debug_warning("yahoo", "yahoo_process_conference_invite " + "got non-UTF-8 string for key %d\n", pair->key); + } break; case 51: /* This user is being invited to the conference. Comes with status = 11, so we wont reach here */ break; case 52: /* Invited users. Assuming us invited, since we got this packet */ break; /* break needed, or else we add the users to the conference before they accept the invitation */ case 53: /* members who have already joined the conference */ - g_string_append_printf(members, "%s\n", pair->value); + if (g_utf8_validate(pair->value, -1, NULL)) { + g_string_append_printf(members, "%s\n", pair->value); + } else { + purple_debug_warning("yahoo", "yahoo_process_conference_invite " + "got non-UTF-8 string for key %d\n", pair->key); + } break; case 58: g_free(msg); @@ -220,7 +230,12 @@ room = yahoo_string_decode(gc, pair->value, FALSE); break; case 54: - who = pair->value; + if (g_utf8_validate(pair->value, -1, NULL)) { + who = pair->value; + } else { + purple_debug_warning("yahoo", "yahoo_process_conference_decline " + "got non-UTF-8 string for key %d\n", pair->key); + } break; case 14: g_free(msg); @@ -278,7 +293,12 @@ room = yahoo_string_decode(gc, pair->value, FALSE); break; case 53: - who = pair->value; + if (g_utf8_validate(pair->value, -1, NULL)) { + who = pair->value; + } else { + purple_debug_warning("yahoo", "yahoo_process_conference_logon " + "got non-UTF-8 string for key %d\n", pair->key); + } break; } } @@ -310,7 +330,12 @@ room = yahoo_string_decode(gc, pair->value, FALSE); break; case 56: - who = pair->value; + if (g_utf8_validate(pair->value, -1, NULL)) { + who = pair->value; + } else { + purple_debug_warning("yahoo", "yahoo_process_conference_logoff " + "got non-UTF-8 string for key %d\n", pair->key); + } break; } } @@ -341,7 +366,12 @@ room = yahoo_string_decode(gc, pair->value, FALSE); break; case 3: - who = pair->value; + if (g_utf8_validate(pair->value, -1, NULL)) { + who = pair->value; + } else { + purple_debug_warning("yahoo", "yahoo_process_conference_message " + "got non-UTF-8 string for key %d\n", pair->key); + } break; case 14: msg = pair->value; @@ -533,7 +563,12 @@ info about individual room members, (including us) */ case 109: /* the yahoo id */ - members = g_list_append(members, pair->value); + if (g_utf8_validate(pair->value, -1, NULL)) { + members = g_list_append(members, pair->value); + } else { + purple_debug_warning("yahoo", "yahoo_process_chat_join " + "got non-UTF-8 string for key %d\n", pair->key); + } break; case 110: /* age */ break; @@ -630,8 +665,14 @@ g_free(room); room = yahoo_string_decode(gc, pair->value, TRUE); } - if (pair->key == 109) - who = pair->value; + if (pair->key == 109) { + if (g_utf8_validate(pair->value, -1, NULL)) { + who = pair->value; + } else { + purple_debug_warning("yahoo", "yahoo_process_chat_exit " + "got non-UTF-8 string for key %d\n", pair->key); + } + } } if (who && room) { @@ -664,10 +705,20 @@ room = yahoo_string_decode(gc, pair->value, TRUE); break; case 109: - who = pair->value; + if (g_utf8_validate(pair->value, -1, NULL)) { + who = pair->value; + } else { + purple_debug_warning("yahoo", "yahoo_process_chat_message " + "got non-UTF-8 string for key %d\n", pair->key); + } break; case 117: - msg = pair->value; + if (g_utf8_validate(pair->value, -1, NULL)) { + msg = pair->value; + } else { + purple_debug_warning("yahoo", "yahoo_process_chat_message " + "got non-UTF-8 string for key %d\n", pair->key); + } break; case 124: msgtype = strtol(pair->value, NULL, 10); @@ -730,7 +781,12 @@ msg = yahoo_string_decode(gc, pair->value, FALSE); break; case 119: - who = pair->value; + if (g_utf8_validate(pair->value, -1, NULL)) { + who = pair->value; + } else { + purple_debug_warning("yahoo", "yahoo_process_chat_addinvite " + "got non-UTF-8 string for key %d\n", pair->key); + } break; case 118: /* us */ break;