Package: gitg
Version: 0.2.4-1.1
Severity: important
Tags: patch
Hi!
Recently (maybe after the introduction of GTK3 in Debian), gitg has
started to crash when staging individual hunks.
Here's the backtrace. Obviously, the iter variable is not set.
Without carefully reading the source code, I came up with the attached
patch that fixes the issue for me, but maybe the upstream author wants
to have a look and propose a better solution, if any.
Cheers
PS: To ease the Debian maintainer's life, the patch already contains
some DEP-3 fields.
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff76ed660 in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
(gdb) bt
#0 0x00007ffff76ed660 in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#1 0x00007ffff77042bc in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#2 0x00007ffff7704ffb in gtk_text_iter_get_line ()
from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#3 0x000000000042c5db in gitg_diff_view_get_header_at_iter (view=0x818110,
iter=0x8021f8, diff_iter=0x7fffffffd2a0) at gitg-diff-view.c:1404
#4 0x0000000000423976 in get_patch_header (view=0x802000, buffer=0x8431c0,
iter=0x8021f8) at gitg-commit-view.c:675
#5 0x0000000000423ab5 in get_hunk_patch (view=0x802000, iter=0x8021f8)
at gitg-commit-view.c:711
#6 0x000000000042426d in handle_stage_unstage (view=0x802000, iter=0x8021f8)
at gitg-commit-view.c:922
#7 0x0000000000427afc in on_stage_changes (action=0x7fffe8041040,
view=0x802000) at gitg-commit-view.c:2257
#8 0x00007ffff591c724 in g_closure_invoke ()
from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#9 0x00007ffff592d7b0 in ?? ()
from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#10 0x00007ffff593572c in g_signal_emit_valist ()
from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#11 0x00007ffff59358c2 in g_signal_emit ()
from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#12 0x00007ffff75776f3 in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#13 0x00007ffff591ca03 in ?? ()
from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#14 0x00007ffff5935076 in g_signal_emit_valist ()
from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#15 0x00007ffff59358c2 in g_signal_emit ()
from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#16 0x00007ffff778382c in gtk_widget_activate ()
from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#17 0x00007ffff767706e in gtk_menu_shell_activate_item ()
from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#18 0x00007ffff767740b in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#19 0x00007ffff765c39f in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#20 0x00007ffff591ca03 in ?? ()
from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#21 0x00007ffff5935076 in g_signal_emit_valist ()
from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#22 0x00007ffff59358c2 in g_signal_emit ()
from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#23 0x00007ffff778442e in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#24 0x00007ffff765a305 in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#25 0x00007ffff765bf73 in gtk_main_do_event ()
from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#26 0x00007ffff72a5002 in ?? () from /usr/lib/x86_64-linux-gnu/libgdk-3.so.0
#27 0x00007ffff565e205 in g_main_context_dispatch ()
from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#28 0x00007ffff565e538 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#29 0x00007ffff565e932 in g_main_loop_run ()
from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#30 0x00007ffff765b2d5 in gtk_main ()
from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#31 0x0000000000419d71 in main (argc=1, argv=0x7fffffffe498) at gitg.c:206
(gdb) frame 3
#3 0x000000000042c5db in gitg_diff_view_get_header_at_iter (view=0x818110,
iter=0x8021f8, diff_iter=0x7fffffffd2a0) at gitg-diff-view.c:1404
1404 ensure_scan (view, gtk_text_iter_get_line (iter));
(gdb) list
1399 if (!view->priv->diff_enabled)
1400 {
1401 return FALSE;
1402 }
1403
1404 ensure_scan (view, gtk_text_iter_get_line (iter));
1405
1406 Region *region = find_current_region (view,
gtk_text_iter_get_line (iter));
1407
1408 while (region && region->type == GITG_DIFF_ITER_TYPE_HUNK)
(gdb) p iter
$1 = (const GtkTextIter *) 0x8021f8
(gdb) p view
$2 = (GitgDiffView *) 0x818110
(gdb) p *iter
$3 = {dummy1 = 0x0, dummy2 = 0x0, dummy3 = 0, dummy4 = 0, dummy5 = 0,
dummy6 = 0, dummy7 = 0, dummy8 = 0, dummy9 = 0x0, dummy10 = 0x0,
dummy11 = 0, dummy12 = 0, dummy13 = 0, dummy14 = 0x0}
-- System Information:
Debian Release: wheezy/sid
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'testing')
Architecture: amd64 (x86_64)
Kernel: Linux 3.2.2 (SMP w/8 CPU cores; PREEMPT)
Locale: LANG=C, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to
en_US.UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages gitg depends on:
ii dbus-x11 1.5.12-1
ii dconf-gsettings-backend [gsettings-backend] 0.12.1-1
ii git 1:1.7.10-1
ii gsettings-desktop-schemas 3.4.2-1
ii libatk1.0-0 2.4.0-2
ii libc6 2.13-32
ii libcairo-gobject2 1.12.2-2
ii libcairo2 1.12.2-2
ii libdconf0 0.12.1-1
ii libgdk-pixbuf2.0-0 2.26.1-1
ii libglib2.0-0 2.32.3-1
ii libgtk-3-0 3.4.2-1
ii libgtksourceview-3.0-0 3.4.2-1
ii libpango1.0-0 1.30.0-1
gitg recommends no packages.
gitg suggests no packages.
-- no debconf information
From: Adrian Knoth <[email protected]>
Forwarded-Upstream: please_forward
Bugs-Debian: your_bts_bugnumber_goes_here
Last-Update: 2012-05-22
Description: Fix segfault when staging individual hunk
--- a/gitg/gitg-commit-view.c
+++ b/gitg/gitg-commit-view.c
@@ -2254,6 +2254,9 @@ on_stage_changes(GtkAction *action, GitgCommitView *view)
}
else
{
+ gboolean is_hunk;
+
+ get_info_at_pointer (view, &view->priv->context_iter, &is_hunk, NULL, NULL);
handle_stage_unstage(view, &view->priv->context_iter);
}
}