# HG changeset patch # User Mark Doliner # Date 1145508306 0 # Node ID 4132d997cceccd591ef90c1ed9fd45c0b06e56a6 # Parent b76c6de0c3b53cd590f9c3cd8bdbc5d49e6cdb7a [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 diff -r b76c6de0c3b5 -r 4132d997ccec src/protocols/oscar/family_admin.c --- 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); diff -r b76c6de0c3b5 -r 4132d997ccec src/protocols/oscar/family_icbm.c --- 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. diff -r b76c6de0c3b5 -r 4132d997ccec src/protocols/oscar/family_oservice.c --- 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); diff -r b76c6de0c3b5 -r 4132d997ccec src/protocols/oscar/family_userlookup.c --- 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)); diff -r b76c6de0c3b5 -r 4132d997ccec src/protocols/oscar/oscar.c --- 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; diff -r b76c6de0c3b5 -r 4132d997ccec src/protocols/oscar/peer.c --- 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 "