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:

Reply via email to