diff libgaim/protocols/irc/dcc_send.c @ 15283:c2f15e2117dc

[gaim-migrate @ 18073] gaim_xfer_new() can return NULL via g_return_if_fail(). It should therefore not be assumed that it returns a GaimXfer; check against its return value before proceeding when creating a GaimXfer. committer: Tailor Script <tailor@pidgin.im>
author Evan Schoenberg <evan.s@dreskin.net>
date Thu, 04 Jan 2007 23:20:12 +0000
parents 645598a4ec04
children
line wrap: on
line diff
--- a/libgaim/protocols/irc/dcc_send.c	Thu Jan 04 19:21:10 2007 +0000
+++ b/libgaim/protocols/irc/dcc_send.c	Thu Jan 04 23:20:12 2007 +0000
@@ -108,31 +108,34 @@
 	i++;
 
 	xfer = gaim_xfer_new(irc->account, GAIM_XFER_RECEIVE, from);
-	xd = g_new0(struct irc_xfer_rx_data, 1);
-	xfer->data = xd;
+	if (xfer)
+	{
+		xd = g_new0(struct irc_xfer_rx_data, 1);
+		xfer->data = xd;
 
-	gaim_xfer_set_filename(xfer, filename->str);
-	xfer->remote_port = atoi(token[i+1]);
+		gaim_xfer_set_filename(xfer, filename->str);
+		xfer->remote_port = atoi(token[i+1]);
 
-	nip = strtoul(token[i], NULL, 10);
-	if (nip) {
-		addr.s_addr = htonl(nip);
-		xd->ip = g_strdup(inet_ntoa(addr));
-	} else {
-		xd->ip = g_strdup(token[i]);
+		nip = strtoul(token[i], NULL, 10);
+		if (nip) {
+			addr.s_addr = htonl(nip);
+			xd->ip = g_strdup(inet_ntoa(addr));
+		} else {
+			xd->ip = g_strdup(token[i]);
+		}
+		gaim_debug(GAIM_DEBUG_INFO, "irc", "Receiving file from %s\n",
+				   xd->ip);
+		gaim_xfer_set_size(xfer, token[i+2] ? atoi(token[i+2]) : 0);
+		
+		gaim_xfer_set_init_fnc(xfer, irc_dccsend_recv_init);
+		gaim_xfer_set_ack_fnc(xfer, irc_dccsend_recv_ack);
+		
+		gaim_xfer_set_end_fnc(xfer, irc_dccsend_recv_destroy);
+		gaim_xfer_set_request_denied_fnc(xfer, irc_dccsend_recv_destroy);
+		gaim_xfer_set_cancel_send_fnc(xfer, irc_dccsend_recv_destroy);
+		
+		gaim_xfer_request(xfer);
 	}
-	gaim_debug(GAIM_DEBUG_INFO, "irc", "Receiving file from %s\n",
-		xd->ip);
-	gaim_xfer_set_size(xfer, token[i+2] ? atoi(token[i+2]) : 0);
-
-	gaim_xfer_set_init_fnc(xfer, irc_dccsend_recv_init);
-	gaim_xfer_set_ack_fnc(xfer, irc_dccsend_recv_ack);
-
-	gaim_xfer_set_end_fnc(xfer, irc_dccsend_recv_destroy);
-	gaim_xfer_set_request_denied_fnc(xfer, irc_dccsend_recv_destroy);
-	gaim_xfer_set_cancel_send_fnc(xfer, irc_dccsend_recv_destroy);
-
-	gaim_xfer_request(xfer);
 	g_strfreev(token);
 	g_string_free(filename, TRUE);
 }
@@ -344,17 +347,19 @@
 
 	/* Build the file transfer handle */
 	xfer = gaim_xfer_new(gaim_connection_get_account(gc), GAIM_XFER_SEND, who);
-
-	xd = g_new0(struct irc_xfer_send_data, 1);
-	xd->fd = -1;
-	xfer->data = xd;
+	if (xfer)
+	{
+		xd = g_new0(struct irc_xfer_send_data, 1);
+		xd->fd = -1;
+		xfer->data = xd;
 
-	/* Setup our I/O op functions */
-	gaim_xfer_set_init_fnc(xfer, irc_dccsend_send_init);
-	gaim_xfer_set_write_fnc(xfer, irc_dccsend_send_write);
-	gaim_xfer_set_end_fnc(xfer, irc_dccsend_send_destroy);
-	gaim_xfer_set_request_denied_fnc(xfer, irc_dccsend_send_destroy);
-	gaim_xfer_set_cancel_send_fnc(xfer, irc_dccsend_send_destroy);
+		/* Setup our I/O op functions */
+		gaim_xfer_set_init_fnc(xfer, irc_dccsend_send_init);
+		gaim_xfer_set_write_fnc(xfer, irc_dccsend_send_write);
+		gaim_xfer_set_end_fnc(xfer, irc_dccsend_send_destroy);
+		gaim_xfer_set_request_denied_fnc(xfer, irc_dccsend_send_destroy);
+		gaim_xfer_set_cancel_send_fnc(xfer, irc_dccsend_send_destroy);
+	}
 
 	return xfer;
 }