reassign 622605 packagekit notfound 622605 2.32.0-2 found 622605 0.6.12-2 tags 622605 + patch kthxbye
Here's a backtrace. I built my own package hence the presence of the actual line of pk-client.c, and never actually installed. Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7752cf7 in pk_client_create_helper_argv_envp (state=0x7b5270, argv=0x7fffffffe248, envp=0x7fffffffe240) at pk-client.c:1878 1878 *envp[envpi++] = g_strdup_printf ("DISPLAY=%s", display); (gdb) bt #0 0x00007ffff7752cf7 in pk_client_create_helper_argv_envp (state=0x7b5270, argv=0x7fffffffe248, envp=0x7fffffffe240) at pk-client.c:1878 #1 0x00007ffff7752e26 in pk_client_create_helper_socket (state=0x7b5270) at pk-client.c:1917 #2 0x00007ffff775328d in pk_client_get_tid_cb (object=0x6cb830, res=0x811300, state=0x7b5270) at pk-client.c:2017 #3 0x00007ffff4ebffc9 in complete_in_idle_cb (data=0x7ffff2ad0e40) at /build/buildd-glib2.0_2.28.1-1+b1-amd64-6erLbp/glib2.0-2.28.1/./gio/gsimpleasyncresult.c:757 #4 0x00007ffff2e532e2 in g_main_dispatch (context=0x66af10) at /build/buildd-glib2.0_2.28.1-1+b1-amd64-6erLbp/glib2.0-2.28.1/./glib/gmain.c:2440 #5 g_main_context_dispatch (context=0x66af10) at /build/buildd-glib2.0_2.28.1-1+b1-amd64-6erLbp/glib2.0-2.28.1/./glib/gmain.c:3013 #6 0x00007ffff2e579a8 in g_main_context_iterate (context=0x66af10, block=<value optimized out>, dispatch=<value optimized out>, self=<value optimized out>) at /build/buildd-glib2.0_2.28.1-1+b1-amd64-6erLbp/glib2.0-2.28.1/./glib/gmain.c:3091 #7 0x00007ffff2e57eb5 in g_main_loop_run (loop=0x824e00) at /build/buildd-glib2.0_2.28.1-1+b1-amd64-6erLbp/glib2.0-2.28.1/./glib/gmain.c:3299 #8 0x00007ffff578f5f7 in IA__gtk_main () at /tmp/buildd/gtk+2.0-2.24.1/gtk/gtkmain.c:1255 #9 0x000000000040ab01 in ?? () #10 0x00007ffff2792c4d in __libc_start_main (main=<value optimized out>, argc=<value optimized out>, ubp_av=<value optimized out>, init=<value optimized out>, fini=<value optimized out>, rtld_fini=<value optimized out>, stack_end=0x7fffffffe678) at libc-start.c:228 #11 0x000000000040a839 in ?? () #12 0x00007fffffffe678 in ?? () #13 0x000000000000001c in ?? () #14 0x0000000000000001 in ?? () #15 0x00007fffffffe96c in ?? () #16 0x0000000000000000 in ?? () So I looked into this and I'm really confused as to why this segfaults. I also don't know how the attached patch fixes this for me. Any ideas? -- Jonny Lamb, UK jo...@debian.org
--- packagekit-0.6.12.orig/lib/packagekit-glib2/pk-client.c 2011-04-19 19:58:40.337900003 +0100 +++ packagekit-0.6.12/lib/packagekit-glib2/pk-client.c 2011-04-19 19:58:56.249900251 +0100 @@ -1841,13 +1841,14 @@ static gboolean pk_client_create_helper_argv_envp (PkClientState *state, gchar ***argv, - gchar ***envp) + gchar ***envp_out) { const gchar *dialog = NULL; const gchar *display; const gchar *term; gboolean ret; guint envpi = 0; + gchar **envp; /* check we have the right file */ ret = g_file_test ("/usr/bin/debconf-communicate", @@ -1859,23 +1860,24 @@ *argv = g_new0 (gchar *, 2); *argv[0] = g_strdup ("/usr/bin/debconf-communicate"); - *envp = g_new0 (gchar *, 8); - *envp[envpi++] = g_strdup ("DEBCONF_DB_REPLACE=configdb"); - *envp[envpi++] = g_strdup ("DEBCONF_DB_OVERRIDE=Pipe{infd:none outfd:none}"); + *envp_out = g_new0 (gchar *, 8); + envp = *envp_out; + envp[envpi++] = g_strdup ("DEBCONF_DB_REPLACE=configdb"); + envp[envpi++] = g_strdup ("DEBCONF_DB_OVERRIDE=Pipe{infd:none outfd:none}"); if (pk_debug_is_verbose ()) - *envp[envpi++] = g_strdup ("DEBCONF_DEBUG=."); + envp[envpi++] = g_strdup ("DEBCONF_DEBUG=."); /* do we have an available terminal to use */ term = g_getenv ("TERM"); if (term != NULL) { - *envp[envpi++] = g_strdup_printf ("TERM=%s", term); + envp[envpi++] = g_strdup_printf ("TERM=%s", term); dialog = "dialog"; } /* do we have access to the display */ display = g_getenv ("DISPLAY"); if (display != NULL) { - *envp[envpi++] = g_strdup_printf ("DISPLAY=%s", display); + envp[envpi++] = g_strdup_printf ("DISPLAY=%s", display); if (g_strcmp0 (g_getenv ("KDE_FULL_SESSION"), "true") == 0) dialog = "kde"; else @@ -1884,7 +1886,7 @@ /* indicate a prefered frontend */ if (dialog != NULL) { - *envp[envpi++] = g_strdup_printf ("DEBIAN_FRONTEND=%s", dialog); + envp[envpi++] = g_strdup_printf ("DEBIAN_FRONTEND=%s", dialog); g_debug ("using frontend %s", dialog); } out: