diff src/protocols/oscar/family_icbm.c @ 13664:4132d997ccec

[gaim-migrate @ 16066] Fix Coverity CID 45: Check to make sure a channel 2 ICBM actually contains an IP address TLV before attempting to use it. This avoids a crash when the server sends us an abnormal channel 2 ICBM. I'm not sure if that ever happens. Fix Coverity CID 204: Don't attempt to send data over a FLAP BOS connection that doesn't exist. This should never happen because the account should get disconnected first. Fix Coverity CID 205: Don't check that a variable 'od' which we know is valid is not equal to NULL in aim_search_address() in family_userlookup.c Fix Coverity CID 206: Don't check that the variable 'od' which we know is valid is not equal to NULL in aim_chat_join() in family_oservice.c Fix Coverity CID 207: I neglected to remove a "return;" line from aim_admin_setnick() in family_admin.c which caused setting your AIM screen name formatting to not work. Fix Coverity CID 208: Remove a duplicate call to gaim_connection_get_account() in peer_connection_propose() in peer.c. Fix Coverity CID 209: Remove the unused variable "username" from incomingim_chan2() in oscar.c. Fix Coverity CID 210: Remove the unused variable "account" from peer_connection_listen_cb() in peer.c. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 20 Apr 2006 04:45:06 +0000
parents b198d0c26b83
children 6fc412e59214
line wrap: on
line diff
--- a/src/protocols/oscar/family_icbm.c	Wed Apr 19 05:50:50 2006 +0000
+++ b/src/protocols/oscar/family_icbm.c	Thu Apr 20 04:45:06 2006 +0000
@@ -1906,6 +1906,7 @@
 	aim_rxcallback_t userfunc;
 	aim_tlv_t *block1, *servdatatlv;
 	aim_tlvlist_t *list2;
+	aim_tlv_t *tlv;
 	IcbmArgsCh2 args;
 	ByteStream bbs, sdbs, *sdbsptr = NULL;
 	guint8 *cookie2;
@@ -1964,43 +1965,31 @@
 	 *
 	 * TODO: I don't like this.  Maybe just read in an int?  Or inet_ntoa...
 	 */
-	if (aim_tlv_gettlv(list2, 0x0002, 1)) {
-		aim_tlv_t *iptlv;
-
-		iptlv = aim_tlv_gettlv(list2, 0x0002, 1);
-		if (iptlv->length == 4)
-			snprintf(proxyip, sizeof(proxyip), "%hhu.%hhu.%hhu.%hhu",
-				iptlv->value[0], iptlv->value[1],
-				iptlv->value[2], iptlv->value[3]);
-	}
+	tlv = aim_tlv_gettlv(list2, 0x0002, 1);
+	if ((tlv != NULL) && (tlv->length == 4))
+		snprintf(proxyip, sizeof(proxyip), "%hhu.%hhu.%hhu.%hhu",
+				tlv->value[0], tlv->value[1],
+				tlv->value[2], tlv->value[3]);
 
 	/*
 	 * IP address from the perspective of the client.
 	 */
-	if (aim_tlv_gettlv(list2, 0x0003, 1)) {
-		aim_tlv_t *iptlv;
-
-		iptlv = aim_tlv_gettlv(list2, 0x0003, 1);
-		if (iptlv->length == 4)
-			snprintf(clientip, sizeof(clientip), "%hhu.%hhu.%hhu.%hhu",
-				iptlv->value[0], iptlv->value[1],
-				iptlv->value[2], iptlv->value[3]);
-	}
+	tlv = aim_tlv_gettlv(list2, 0x0003, 1);
+	if ((tlv != NULL) && (tlv->length == 4))
+		snprintf(clientip, sizeof(clientip), "%hhu.%hhu.%hhu.%hhu",
+				tlv->value[0], tlv->value[1],
+				tlv->value[2], tlv->value[3]);
 
 	/*
 	 * Verified IP address (from the perspective of Oscar).
 	 *
 	 * This is added by the server.
 	 */
-	if (aim_tlv_gettlv(list2, 0x0004, 1)) {
-		aim_tlv_t *iptlv;
-
-		iptlv = aim_tlv_gettlv(list2, 0x0004, 1);
-		if (iptlv->length == 4)
-			snprintf(verifiedip, sizeof(verifiedip), "%hhu.%hhu.%hhu.%hhu",
-				iptlv->value[0], iptlv->value[1],
-				iptlv->value[2], iptlv->value[3]);
-	}
+	tlv = aim_tlv_gettlv(list2, 0x0004, 1);
+	if ((tlv != NULL) && (tlv->length == 4))
+		snprintf(verifiedip, sizeof(verifiedip), "%hhu.%hhu.%hhu.%hhu",
+				tlv->value[0], tlv->value[1],
+				tlv->value[2], tlv->value[3]);
 
 	/*
 	 * Port number for something.