Mercurial > pidgin
changeset 9070:f13172eed3ad
[gaim-migrate @ 9846]
This fixes what is hopefully the last common direct connect segfault.
Basicly, we were memcpying cookies, and one was null. This was because
our get the cookie function was returning null, because it checked if the
conn was a direct im conn and it wasn't. It was a listening conn instead.
So this adds NULL checks, and makes the get cookie function do less sanity
checking, since it was failing some valid cases.
committer: Tailor Script <tailor@pidgin.im>
author | Tim Ringenbach <marv@pidgin.im> |
---|---|
date | Wed, 26 May 2004 04:55:10 +0000 |
parents | 0c69f5182652 |
children | 2233d33b2285 |
files | src/protocols/oscar/ft.c src/protocols/oscar/oscar.c |
diffstat | 2 files changed, 14 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/protocols/oscar/ft.c Wed May 26 03:28:36 2004 +0000 +++ b/src/protocols/oscar/ft.c Wed May 26 04:55:10 2004 +0000 @@ -423,10 +423,6 @@ if (!conn || !conn->internal) return NULL; - if ((conn->type != AIM_CONN_TYPE_RENDEZVOUS) || - (conn->subtype != AIM_CONN_SUBTYPE_OFT_DIRECTIM)) - return NULL; - intdata = (struct aim_odc_intdata *)conn->internal; return intdata->cookie;
--- a/src/protocols/oscar/oscar.c Wed May 26 03:28:36 2004 +0000 +++ b/src/protocols/oscar/oscar.c Wed May 26 04:55:10 2004 +0000 @@ -3141,9 +3141,16 @@ } static int incomingim_chan2(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args) { - GaimConnection *gc = sess->aux_data; - OscarData *od = gc->proto_data; - const char *username = gaim_account_get_username(gaim_connection_get_account(gc)); + GaimConnection *gc; + OscarData *od; + const char *username; + + g_return_val_if_fail(sess != NULL, 0); + g_return_val_if_fail(sess->aux_data != NULL, 0); + + gc = sess->aux_data; + od = gc->proto_data; + username = gaim_account_get_username(gaim_connection_get_account(gc)); if (!args) return 0; @@ -3283,7 +3290,9 @@ * and then ask them to connect to us. */ snprintf(d->ip, sizeof(d->ip), "%s:%d", args->clientip, args->port?args->port:5190); memcpy(d->cookie, args->cookie, 8); - if (dim && !dim->connected && (!memcmp(aim_odc_getcookie(dim->conn), args->cookie, 8))) { + if (dim && !dim->connected && aim_odc_getcookie(dim->conn) && args->cookie && + (!memcmp(aim_odc_getcookie(dim->conn), args->cookie, 8))) { + oscar_direct_im_destroy(od, dim); d->donttryagain = TRUE; accept_direct_im_request(d); @@ -3757,7 +3766,7 @@ struct oscar_direct_im *dim; gaim_debug_info("oscar", - "AAA - Other user declined some sort of direct" + "AAA - Other user declined some sort of direct " "connect attempt (automaticly?)\n"); if ((xfer = oscar_find_xfer_by_cookie(od->file_transfers, cookie))) gaim_xfer_cancel_remote(xfer);