libpurple/protocols/yahoo/yahoochat.c

changeset 35265
77664079d0f0
parent 35021
eaf8156d3c5e
parent 35259
b0345c25f886
child 35267
7fd6d7cba52d
--- 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;

mercurial