changeset 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 b76c6de0c3b5
children ee026e289bc4
files src/protocols/oscar/family_admin.c src/protocols/oscar/family_icbm.c src/protocols/oscar/family_oservice.c src/protocols/oscar/family_userlookup.c src/protocols/oscar/oscar.c src/protocols/oscar/peer.c
diffstat 6 files changed, 26 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/src/protocols/oscar/family_admin.c	Wed Apr 19 05:50:50 2006 +0000
+++ b/src/protocols/oscar/family_admin.c	Thu Apr 20 04:45:06 2006 +0000
@@ -128,7 +128,6 @@
 	aim_tlvlist_t *tl = NULL;
 
 	fr = flap_frame_new(od, 0x02, 10+2+2+strlen(newnick));
-		return -ENOMEM;
 
 	snacid = aim_cachesnac(od, 0x0007, 0x0004, 0x0000, NULL, 0);
 	aim_putsnac(&fr->data, 0x0007, 0x0004, 0x0000, snacid);
--- 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.
--- a/src/protocols/oscar/family_oservice.c	Wed Apr 19 05:50:50 2006 +0000
+++ b/src/protocols/oscar/family_oservice.c	Thu Apr 20 04:45:06 2006 +0000
@@ -124,7 +124,7 @@
 	struct chatsnacinfo csi;
 
 	conn = flap_connection_findbygroup(od, SNAC_FAMILY_BOS);
-	if (!od || !conn || !roomname || !strlen(roomname))
+	if (!conn || !roomname || !strlen(roomname))
 		return -EINVAL;
 
 	frame = flap_frame_new(od, 0x02, 512);
--- a/src/protocols/oscar/family_userlookup.c	Wed Apr 19 05:50:50 2006 +0000
+++ b/src/protocols/oscar/family_userlookup.c	Thu Apr 20 04:45:06 2006 +0000
@@ -67,7 +67,7 @@
 
 	conn = flap_connection_findbygroup(od, SNAC_FAMILY_USERLOOKUP);
 
-	if (!od || !conn || !address)
+	if (!conn || !address)
 		return -EINVAL;
 
 	frame = flap_frame_new(od, 0x02, 10+strlen(address));
--- a/src/protocols/oscar/oscar.c	Wed Apr 19 05:50:50 2006 +0000
+++ b/src/protocols/oscar/oscar.c	Thu Apr 20 04:45:06 2006 +0000
@@ -1991,7 +1991,6 @@
 {
 	GaimConnection *gc;
 	GaimAccount *account;
-	const char *username = NULL;
 	char *message = NULL;
 
 	g_return_val_if_fail(od != NULL, 0);
@@ -2000,7 +1999,6 @@
 	gc = od->gc;
 	account = gaim_connection_get_account(gc);
 	od = gc->proto_data;
-	username = gaim_account_get_username(account);
 
 	if (args == NULL)
 		return 0;
--- a/src/protocols/oscar/peer.c	Wed Apr 19 05:50:50 2006 +0000
+++ b/src/protocols/oscar/peer.c	Thu Apr 20 04:45:06 2006 +0000
@@ -516,14 +516,12 @@
 	PeerConnection *conn;
 	OscarData *od;
 	GaimConnection *gc;
-	GaimAccount *account;
 	struct sockaddr addr;
 	socklen_t addrlen = sizeof(addr);
 
 	conn = data;
 	od = conn->od;
 	gc = od->gc;
-	account = gaim_connection_get_account(gc);
 
 	gaim_debug_info("oscar", "Accepting connection on listener socket.\n");
 
@@ -595,6 +593,13 @@
 
 	/* Send the "please connect to me!" ICBM */
 	bos_conn = flap_connection_findbygroup(od, SNAC_FAMILY_ICBM);
+	if (bos_conn == NULL)
+	{
+		/* Not good */
+		peer_connection_trynext(conn);
+		return;
+	}
+
 	listener_ip = gaim_network_get_my_ip(bos_conn->fd);
 	listener_port = gaim_network_get_port_from_fd(conn->listenerfd);
 	if (conn->type == OSCAR_CAPABILITY_DIRECTIM)
@@ -774,9 +779,6 @@
 peer_connection_propose(OscarData *od, OscarCapability type, const char *sn)
 {
 	PeerConnection *conn;
-	GaimAccount *account;
-
-	account = gaim_connection_get_account(od->gc);
 
 	if (type == OSCAR_CAPABILITY_DIRECTIM)
 	{
@@ -785,6 +787,7 @@
 		{
 			if (conn->ready)
 			{
+				GaimAccount *account;
 				GaimConversation *conv;
 
 				gaim_debug_info("oscar", "Already have a direct IM "