Proposed patch for the segfault. --- /tmp/x/pidgin-encryption-3.0/state_ui.c 2007-05-07 02:15:27.000000000 +0200 +++ pidgin-encryption-3.0/state_ui.c 2009-04-26 17:08:02.000000000 +0200 @@ -268,6 +268,8 @@ static GtkIMHtmlSmiley * create_smiley_if_absent(GtkIMHtml *imhtml) { GtkIMHtmlSmiley * smiley; const char* category = gtk_imhtml_get_protocol_name(imhtml); + + if (!category) return NULL; /* make sure that the category we're about to use to add (based on the protocol name) */ /* already exists. If it doesn't, just use the default category so it isn't created. */
Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7f9b502d87d0 (LWP 16876)] IA__g_str_hash (v=0x0) at /tmp/buildd/glib2.0-2.20.1/glib/gstring.c:95 95 /tmp/buildd/glib2.0-2.20.1/glib/gstring.c: No such file or directory. in /tmp/buildd/glib2.0-2.20.1/glib/gstring.c (gdb) bt #0 IA__g_str_hash (v=0x0) at /tmp/buildd/glib2.0-2.20.1/glib/gstring.c:95 #1 0x00007f9b4d6f7c2f in IA__g_hash_table_lookup (hash_table=0x185e4f0, key=0x0) at /tmp/buildd/glib2.0-2.20.1/glib/ghash.c:195 #2 0x00007f9b397dd029 in create_smiley_if_absent (imhtml=0x11c0510) at state_ui.c:274 #3 0x00007f9b397dd2b7 in PE_add_smiley (conv=0x1ef8700) at state_ui.c:342 #4 0x00007f9b397d530d in PE_updated_conv_cb (conv=0x1ef8700, data=0x5) at encrypt.c:1076 #5 0x00007f9b4d44cb30 in purple_signal_emit_vargs (instance=<value optimized out>, signal=0x7f9b4d491291 "conversation-updated", args=0x7fff58411680) at ../../libpurple/signals.c:482 #6 0x00007f9b4d44cd72 in purple_signal_emit (instance=0x0, signal=0x0) at ../../libpurple/signals.c:434 #7 0x000000000045e8ca in private_gtkconv_new (conv=0x1ef8700, hidden=0) at ../../pidgin/gtkconv.c:5225 #8 0x000000000045f1bb in pidgin_conv_new (conv=0x0) at ../../pidgin/gtkconv.c:5270 #9 0x00007f9b4d42898c in purple_conversation_new (type=PURPLE_CONV_TYPE_UNKNOWN, account=0xcf2930, name=0x10b9ca0 "moe_e...@hotmail.com") at ../../libpurple/conversation.c:379 #10 0x0000000000462ef0 in pidgin_dialogs_im_with_user (account=0xcf2930, username=0x10b9ca0 "moe_e...@hotmail.com") at ../../pidgin/gtkdialogs.c:760 #11 0x000000000043d85f in gtk_blist_row_activated_cb (tv=<value optimized out>, path=<value optimized out>, col=<value optimized out>, data=<value optimized out>) at ../../pidgin/gtkblist.c:1177 #12 0x00007f9b4d99d11d in IA__g_closure_invoke (closure=0x10837b0, return_value=0x0, n_param_values=3, param_values=0x1f16320, invocation_hint=0x7fff58411a10) at /tmp/buildd/glib2.0-2.20.1/gobject/gclosure.c:767 #13 0x00007f9b4d9b0c2b in signal_emit_unlocked_R (node=0xc01b00, detail=0, instance=0x11980b0, emission_return=0x0, instance_and_params=0x1f16320) at /tmp/buildd/glib2.0-2.20.1/gobject/gsignal.c:3247 #14 0x00007f9b4d9b2022 in IA__g_signal_emit_valist (instance=0x11980b0, signal_id=<value optimized out>, detail=0, var_args=0x7fff58411bf0) at /tmp/buildd/glib2.0-2.20.1/gobject/gsignal.c:2980 #15 0x00007f9b4d9b24f3 in IA__g_signal_emit (instance=0x0, signal_id=0, detail=14655920) at /tmp/buildd/glib2.0-2.20.1/gobject/gsignal.c:3037 #16 0x00007f9b4e9b3cd5 in ?? () from /usr/lib/libgtk-x11-2.0.so.0 #17 0x00007f9b4e8bb958 in ?? () from /usr/lib/libgtk-x11-2.0.so.0 #18 0x00007f9b4d99d11d in IA__g_closure_invoke (closure=0xbc40f0, return_value=0x7fff58411f60, n_param_values=2, param_values=0x1ec9a70, invocation_hint=0x7fff58411f20) at /tmp/buildd/glib2.0-2.20.1/gobject/gclosure.c:767 #19 0x00007f9b4d9b090f in signal_emit_unlocked_R (node=0xbe2060, detail=0, instance=0x11980b0, emission_return=0x7fff584120a0, instance_and_params=0x1ec9a70) at /tmp/buildd/glib2.0-2.20.1/gobject/gsignal.c:3285 #20 0x00007f9b4d9b1ead in IA__g_signal_emit_valist (instance=0x11980b0, signal_id=<value optimized out>, ---Type <return> to continue, or q <return> to quit---q detail=0, Quit (gdb) frame 2 #2 0x00007f9b397dd029 in create_smiley_if_absent (imhtml=0x11c0510) at state_ui.c:274 274 if (g_hash_table_lookup(imhtml->smiley_data, category) == NULL) { (gdb) info locals smiley = (GtkIMHtmlSmiley *) 0xfbc960 category = 0x0 (gdb) list 269 GtkIMHtmlSmiley * smiley; 270 const char* category = gtk_imhtml_get_protocol_name(imhtml); 271 272 /* make sure that the category we're about to use to add (based on the protocol name) */ 273 /* already exists. If it doesn't, just use the default category so it isn't created. */ 274 if (g_hash_table_lookup(imhtml->smiley_data, category) == NULL) { 275 category = NULL; 276 } 277 278 smiley = gtk_imhtml_smiley_get(imhtml, category, CRYPTO_SMILEY); (gdb)
--- /tmp/x/pidgin-encryption-3.0/state_ui.c 2007-05-07 02:15:27.000000000 +0200 +++ pidgin-encryption-3.0/state_ui.c 2009-04-26 17:08:02.000000000 +0200 @@ -268,6 +268,8 @@ static GtkIMHtmlSmiley * create_smiley_if_absent(GtkIMHtml *imhtml) { GtkIMHtmlSmiley * smiley; const char* category = gtk_imhtml_get_protocol_name(imhtml); + + if (!category) return NULL; /* make sure that the category we're about to use to add (based on the protocol name) */ /* already exists. If it doesn't, just use the default category so it isn't created. */