libpurple/protocols/yahoo/yahoochat.c

branch
soc.2013.gobjectification.plugins
changeset 37016
48f85579cc4c
parent 36893
491f8d2fa318
parent 35268
0ff850475a1d
child 37101
8ba9a23354ff
--- a/libpurple/protocols/yahoo/yahoochat.c	Mon Jan 27 17:34:21 2014 +0530
+++ b/libpurple/protocols/yahoo/yahoochat.c	Wed Jan 29 00:28:08 2014 +0530
@@ -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;
@@ -376,7 +406,6 @@
 	YahooData *yd = purple_connection_get_protocol_data(gc);
 	struct yahoo_packet *pkt;
 	char *room2;
-	gboolean utf8 = TRUE;
 
 	if (yd->wm) {
 		g_return_if_fail(yd->ycht != NULL);
@@ -386,7 +415,7 @@
 
 	/* apparently room names are always utf8, or else always not utf8,
 	 * so we don't have to actually pass the flag in the packet. Or something. */
-	room2 = yahoo_string_encode(gc, room, &utf8);
+	room2 = yahoo_string_encode(gc, room, TRUE);
 
 	pkt = yahoo_packet_new(YAHOO_SERVICE_CHATJOIN, YAHOO_STATUS_AVAILABLE, yd->session_id);
 	yahoo_packet_hash(pkt, "ssss",
@@ -533,7 +562,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;
@@ -629,9 +663,14 @@
 		if (pair->key == 104) {
 			g_free(room);
 			room = yahoo_string_decode(gc, pair->value, TRUE);
+		} else 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 (pair->key == 109)
-			who = pair->value;
 	}
 
 	if (who && room) {
@@ -664,10 +703,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 +779,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;
@@ -798,10 +852,9 @@
 	struct yahoo_packet *pkt;
 	GList *who;
 	char *msg, *msg2;
-	int utf8 = 1;
 
 	msg = yahoo_html_to_codes(what);
-	msg2 = yahoo_string_encode(gc, msg, &utf8);
+	msg2 = yahoo_string_encode(gc, msg, TRUE);
 
 	pkt = yahoo_packet_new(YAHOO_SERVICE_CONFMSG, YAHOO_STATUS_AVAILABLE, yd->session_id);
 
@@ -811,8 +864,7 @@
 		yahoo_packet_hash_str(pkt, 53, name);
 	}
 	yahoo_packet_hash(pkt, "ss", 57, room, 14, msg2);
-	if (utf8)
-		yahoo_packet_hash_str(pkt, 97, "1"); /* utf-8 */
+	yahoo_packet_hash_str(pkt, 97, "1"); /* UTF-8 */
 
 	yahoo_packet_send_and_free(pkt, yd);
 	g_free(msg);
@@ -857,7 +909,7 @@
 	char *msg2 = NULL;
 
 	if (msg)
-		msg2 = yahoo_string_encode(gc, msg, NULL);
+		msg2 = yahoo_string_encode(gc, msg, FALSE);
 
 	members = purple_chat_conversation_get_users(c);
 
@@ -883,9 +935,7 @@
 {
 	YahooData *yd = purple_connection_get_protocol_data(gc);
 	struct yahoo_packet *pkt;
-
 	char *eroom;
-	gboolean utf8 = 1;
 
 	if (yd->wm) {
 		g_return_if_fail(yd->ycht != NULL);
@@ -894,7 +944,7 @@
 		return;
 	}
 
-	eroom = yahoo_string_encode(gc, room, &utf8);
+	eroom = yahoo_string_encode(gc, room, TRUE);
 
 	pkt = yahoo_packet_new(YAHOO_SERVICE_CHATEXIT, YAHOO_STATUS_AVAILABLE, yd->session_id);
 	yahoo_packet_hash(pkt, "sss", 104, eroom, 109, dn, 108, "1");
@@ -936,7 +986,6 @@
 	struct yahoo_packet *pkt;
 	int me = 0;
 	char *msg1, *msg2, *room2;
-	gboolean utf8 = TRUE;
 
 	if (yd->wm) {
 		g_return_val_if_fail(yd->ycht != NULL, 1);
@@ -951,9 +1000,9 @@
 
 	msg2 = yahoo_html_to_codes(msg1);
 	g_free(msg1);
-	msg1 = yahoo_string_encode(gc, msg2, &utf8);
+	msg1 = yahoo_string_encode(gc, msg2, TRUE);
 	g_free(msg2);
-	room2 = yahoo_string_encode(gc, room, NULL);
+	room2 = yahoo_string_encode(gc, room, FALSE);
 
 	pkt = yahoo_packet_new(YAHOO_SERVICE_COMMENT, YAHOO_STATUS_AVAILABLE, yd->session_id);
 
@@ -963,8 +1012,7 @@
 	else
 		yahoo_packet_hash_str(pkt, 124, "1");
 	/* fixme: what about /think? (124=3) */
-	if (utf8)
-		yahoo_packet_hash_str(pkt, 97, "1");
+	yahoo_packet_hash_str(pkt, 97, "1"); /* UTF-8 */
 
 	yahoo_packet_send_and_free(pkt, yd);
 	g_free(msg1);
@@ -980,7 +1028,6 @@
 	YahooData *yd = purple_connection_get_protocol_data(gc);
 	struct yahoo_packet *pkt;
 	char *room2, *msg2 = NULL;
-	gboolean utf8 = TRUE;
 
 	if (yd->wm) {
 		g_return_if_fail(yd->ycht != NULL);
@@ -988,9 +1035,9 @@
 		return;
 	}
 
-	room2 = yahoo_string_encode(gc, room, &utf8);
+	room2 = yahoo_string_encode(gc, room, TRUE);
 	if (msg)
-		msg2 = yahoo_string_encode(gc, msg, NULL);
+		msg2 = yahoo_string_encode(gc, msg, FALSE);
 
 	pkt = yahoo_packet_new(YAHOO_SERVICE_CHATADDINVITE, YAHOO_STATUS_AVAILABLE, yd->session_id);
 	yahoo_packet_hash(pkt, "sssss", 1, dn, 118, buddy, 104, room2, 117, (msg2?msg2:""), 129, "0");

mercurial