Segmentation fault during manual merge

Sergey Starosek sergey.starosek at gmail.com
Thu Dec 6 09:45:19 PST 2012


Hi,

Trying to do manual merge of two dives results in segfault.

To reproduce start with empty XML file, import all XML files from the
dives/ directory,
and try to merge dives #1 and #0.

Back-trace is attached.

P.S. Subsurface is built from up-to-date git tree
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.hohndel.org/pipermail/subsurface/attachments/20121206/7d502cc3/attachment-0001.html>
-------------- next part --------------
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff3d2e6d1 in ?? () from /lib64/libc.so.6
(gdb) bt
#0  0x00007ffff3d2e6d1 in ?? () from /lib64/libc.so.6
#1  0x00007ffff3d2e346 in strdup () from /lib64/libc.so.6
#2  0x000000000040e01f in interleave_dive_computers (res=0x8b6818, a=0x886768,
b=0x889a78, offset=3600) at dive.c:1295
#3  0x000000000040e783 in merge_dives (a=0x886550, b=0x889860, offset=3600,
prefer_downloaded=0) at dive.c:1398
#4  0x00000000004228b2 in merge_dive_index (i=0, a=0x886550) at
divelist.c:2017
#5  0x0000000000422940 in merge_dives_cb (menuitem=0x84f820, unused=0x0) at
divelist.c:2038
#6  0x00007ffff50052d2 in g_closure_invoke () from
/usr/lib64/libgobject-2.0.so.0
#7  0x00007ffff5016421 in ?? () from /usr/lib64/libgobject-2.0.so.0
#8  0x00007ffff501e684 in g_signal_emit_valist () from
/usr/lib64/libgobject-2.0.so.0
#9  0x00007ffff501e8a3 in g_signal_emit () from /usr/lib64/libgobject-2.0.so.0
#10 0x00007ffff6d4b71e in gtk_widget_activate () from
/usr/lib64/libgtk-x11-2.0.so.0
#11 0x00007ffff6c43afd in gtk_menu_shell_activate_item () from
/usr/lib64/libgtk-x11-2.0.so.0
#12 0x00007ffff6c43e97 in ?? () from /usr/lib64/libgtk-x11-2.0.so.0
#13 0x00007ffff6c30478 in ?? () from /usr/lib64/libgtk-x11-2.0.so.0
#14 0x00007ffff50052d2 in g_closure_invoke () from
/usr/lib64/libgobject-2.0.so.0
#15 0x00007ffff5016a4d in ?? () from /usr/lib64/libgobject-2.0.so.0
#16 0x00007ffff501e3c2 in g_signal_emit_valist () from
/usr/lib64/libgobject-2.0.so.0
#17 0x00007ffff501e8a3 in g_signal_emit () from /usr/lib64/libgobject-2.0.so.0
#18 0x00007ffff6d4c52f in ?? () from /usr/lib64/libgtk-x11-2.0.so.0
#19 0x00007ffff6c2e5c3 in gtk_propagate_event () from
/usr/lib64/libgtk-x11-2.0.so.0
#20 0x00007ffff6c2e973 in gtk_main_do_event () from
/usr/lib64/libgtk-x11-2.0.so.0
#21 0x00007ffff689b5ac in ?? () from /usr/lib64/libgdk-x11-2.0.so.0
#22 0x00007ffff4d1a643 in g_main_context_dispatch () from
/usr/lib64/libglib-2.0.so.0
#23 0x00007ffff4d1a988 in ?? () from /usr/lib64/libglib-2.0.so.0
#24 0x00007ffff4d1ad7a in g_main_loop_run () from /usr/lib64/libglib-2.0.so.0
#25 0x00007ffff6c2d977 in gtk_main () from /usr/lib64/libgtk-x11-2.0.so.0
#26 0x000000000043480d in run_ui () at gtk-gui.c:1231
#27 0x000000000040bc73 in main (argc=1, argv=0x7fffffffd888) at main.c:292
(gdb) up
#1  0x00007ffff3d2e346 in strdup () from /lib64/libc.so.6
(gdb) up
#2  0x000000000040e01f in interleave_dive_computers (res=0x8b6818, a=0x886768,
b=0x889a78, offset=3600) at dive.c:1295
1295			res->model = strdup(a->model);
(gdb) l
1290		struct divecomputer *a, struct divecomputer *b, int offset)
1291	{
1292		do {
1293			struct divecomputer *match;
1294	
1295			res->model = strdup(a->model);
1296			res->deviceid = a->deviceid;
1297			res->diveid = a->diveid;
1298			res->next = NULL;
1299	
(gdb) p a
$1 = (struct divecomputer *) 0x886768
(gdb) p a->model
$2 = 0x0
(gdb) p *a
$3 = {when = 1293868800, model = 0x0, deviceid = 0, diveid = 0, samples = 0,
alloc_samples = 0, sample = 0x0, events = 0x0, next = 0x0}
(gdb) 


More information about the subsurface mailing list