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. */

Reply via email to