Package: irssi-plugin-xmpp
Version: 0.50+cvs20100122-1
Severity: normal
Tags: patch

I still see this problem here right now, from time to time. It's pretty
hard to reproduce, I'd say one out of 10 times I see this behaviour.

I have been able to produce the following backtrace:

Program received signal SIGSEGV, Segmentation fault.
0xb7a6d448 in strcmp () from /lib/i686/cmov/libc.so.6
(gdb) bt
#0  0xb7a6d448 in strcmp () from /lib/i686/cmov/libc.so.6
#1  0xb79af282 in sig_recv_iq (server=0x81b7f38, lmsg=0x853fa18, type=12, 
id=0x838da18 "262205394421", from=0x0, to=0x8547978 
"anar...@koumbit.org/remote") at xep/ping.c:108
#2  0x080e0ace in ?? ()
#3  0x080e10bc in signal_emit ()
#4  0xb79a80ca in handle_stanza (handler=0x829b450, connection=0x81b8ee0, 
lmsg=0x853fa18, user_data=0x81b7f38) at stanzas.c:77
#5  0xb76263e0 in _lm_message_handler_handle_message (handler=0x81ba4f0, 
connection=0x81b8ee0, message=0x853fa18) at lm-message-handler.c:47
#6  0xb76259b0 in connection_handle_message (queue=0x81b7e20, 
connection=0x81b8ee0) at lm-connection.c:291
#7  connection_message_queue_cb (queue=0x81b7e20, connection=0x81b8ee0) at 
lm-connection.c:439
#8  0xb762700f in message_queue_dispatch_func (source=0x81b5ba0, callback=0, 
user_data=0x0) at lm-message-queue.c:100
#9  0xb7d592f5 in g_main_dispatch (context=0x81135a8) at 
/build/buildd-glib2.0_2.24.1-1-i386-84Pp4V/glib2.0-2.24.1/glib/gmain.c:1960
#10 IA__g_main_context_dispatch (context=0x81135a8) at 
/build/buildd-glib2.0_2.24.1-1-i386-84Pp4V/glib2.0-2.24.1/glib/gmain.c:2513
#11 0xb7d5cfd8 in g_main_context_iterate (context=0x81135a8, block=<value 
optimized out>, dispatch=1, self=0x810f090) at 
/build/buildd-glib2.0_2.24.1-1-i386-84Pp4V/glib2.0-2.24.1/glib/gmain.c:2591
#12 0xb7d5d1b8 in IA__g_main_context_iteration (context=0x81135a8, may_block=1) 
at /build/buildd-glib2.0_2.24.1-1-i386-84Pp4V/glib2.0-2.24.1/glib/gmain.c:2654
#13 0x08071e1c in main () Program received signal SIGSEGV, Segmentation fault.  
0xb7a6d448 in strcmp () from /lib/i686/cmov/libc.so.6

(Note that I had to produce a package with debugging symbols to have
this, but that's another story.)

Note how "from=0x0", a null pointer. I am unsure how that is generated.
That signal is emmitted from src/core/stanzas.c:78:

    from = xmpp_recode_in(lm_message_node_get_attribute(lmsg->node, "from"));
    to = xmpp_recode_in(lm_message_node_get_attribute(lmsg->node, "to"));
    switch(lm_message_get_type(lmsg)) {
    case LM_MESSAGE_TYPE_MESSAGE:
        signal_emit("xmpp recv message", 6,
            server, lmsg, type, id, from, to);
        break;
    case LM_MESSAGE_TYPE_PRESENCE:
        signal_emit("xmpp recv presence", 6,
            server, lmsg, type, id, from, to);
        break;
    case LM_MESSAGE_TYPE_IQ:
        signal_emit("xmpp recv iq", 6,
            server, lmsg, type, id, from, to);
        break;

... which means that xmpp_recode_in() or lm_message_node_get_attribute()
returns null, which may be the behavior to fix in the first place.

In the meantime, I have a patch to workaround the issue that I'm
currently testing, in attachment.

A.

-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: i386 (i686)

Kernel: Linux 2.6.32-trunk-686 (SMP w/1 CPU core)
Locale: LANG=fr_CA.UTF-8, LC_CTYPE=fr_CA.UTF-8 (charmap=UTF-8) (ignored: LC_ALL 
set to fr_CA.UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages irssi-plugin-xmpp depends on:
ii  irssi                         0.8.15-1   terminal based IRC client
ii  libc6                         2.10.2-6   Embedded GNU C Library: Shared lib
ii  libglib2.0-0                  2.24.1-1   The GLib library of C routines
ii  libidn11                      1.18-1     GNU Libidn library, implementation
ii  libloudmouth1-0               1.4.3-5    Lightweight C Jabber library

irssi-plugin-xmpp recommends no packages.

irssi-plugin-xmpp suggests no packages.

-- no debconf information
--- irssi-plugin-xmpp-0.50+cvs20100122.orig/src/core/xep/ping.c
+++ irssi-plugin-xmpp-0.50+cvs20100122/src/core/xep/ping.c
@@ -105,7 +105,7 @@
 
 	if (type == LM_MESSAGE_SUB_TYPE_RESULT) {
 		/* pong response from server of our ping */
-		if (server->ping_id != NULL && strcmp(from, server->domain) == 0
+		if (server->ping_id != NULL && from && strcmp(from, server->domain) == 0
 	    	&& strcmp(id, server->ping_id) == 0) {
 			g_get_current_time(&now);
 			server->lag =

Reply via email to