pidgin: e83f93ec: Add some safety to jabber_send_signal_cb...

Paul Aurich paul at darkrain42.org
Thu Nov 26 13:30:01 EST 2009


On Nov 25, 2009, at 11:08, nosnilmot at pidgin.im wrote:
> Modified files:
>        libpurple/protocols/jabber/jabber.c
> 
> ChangeLog: 
> 
> Add some safety to jabber_send_signal_cb in case someone else was listening
> to jabber-sending-xmlnode and caused the connection to get disconnected
> before the signal got to calling jabber_send_signal_cb. Should fix
> https://bugzilla.redhat.com/show_bug.cgi?id=540835


I'm not convinced this is how the crash is occurring.

From the backtrace, frame 10 indicates this code path is being triggered by a FT request denial.  I'm guessing the FT request dialog isn't closed when an account disconnects (I don't have Pidgin handy, so I can't confirm that, but the request dialog uses the xfer as the purple_request_ handle, not gc).

It seems like a better (and more general) solution would be to close all xfers when an account disconnects, otherwise crashes like this probably exist in other prpls (unless they also use PURPLE_CONNECTION_IS_VALID).

~Paul

> ============================================================
> --- libpurple/protocols/jabber/jabber.c	80eb4367a92a0b7ae0d294d52a96c6cd65dcca04
> +++ libpurple/protocols/jabber/jabber.c	c2a68c8d08099a3020f7c42ae07be750393b222c
> @@ -476,7 +476,14 @@ void jabber_send_signal_cb(PurpleConnect
> 	if (NULL == packet)
> 		return;
> 
> +	if (!PURPLE_CONNECTION_IS_VALID(pc))
> +		return;
> +
> 	js = purple_connection_get_protocol_data(pc);
> +
> +	if (NULL == js)
> +		return;
> +
> 	if (js->bosh)
> 		if (g_str_equal((*packet)->name, "message") ||
> 				g_str_equal((*packet)->name, "iq") ||

~Paul



More information about the Devel mailing list