From: thomas <trast@student•ethz.ch>
To: Junio C Hamano <gitster@pobox•com>
Cc: <git@vger•kernel.org>, Charlie Smurthwaite <charlie@atechmedia•com>
Subject: Re: Segfault with merge-tree on multiple Git versions
Date: Wed, 27 Mar 2013 16:53:27 +0100 [thread overview]
Message-ID: <87boa47saw.fsf@linux-k42r.v.cablecom.net> (raw)
In-Reply-To: <51531059.8000407@atechmedia.com> (Charlie Smurthwaite's message of "Wed, 27 Mar 2013 15:29:29 +0000")
Charlie Smurthwaite <charlie@atechmedia•com> writes:
> I am experiencing a segmentation fault in various versions of Git using
> different repositories. Specifically, I have reproduced it using a
> public repo and the latest stable Git version. Other repos trigger the
> error on different versions.
>
> Full info can be found below. Thanks,
>
> Charlie
>
>
> Test repository:
> https://github.com/atech/mail
>
> Test Command
> git merge-tree 26bb22a052fef9f74063afd4fc6fc11fe200b19f
> 8d6bdf012941d876b2279994e02f1bb0d5c26e7d
> d5ef97ac407d945f231cd7c8fb1cfe48b3a12083
I happened to walk past on IRC and found I could easily reproduce it, so
I bisected:
35ffe7583108ab236dcf81226690388491d9962f is the first bad commit
commit 35ffe7583108ab236dcf81226690388491d9962f
Author: Junio C Hamano <gitster@pobox•com>
Date: Thu Dec 13 15:51:29 2012 -0800
merge-tree: fix d/f conflicts
The previous commit documented two known breakages revolving around
a case where one side flips a tree into a blob (or vice versa),
where the original code simply gets confused and feeds a mixture of
trees and blobs into either the recursive merge-tree (and recursing
into the blob will fail) or three-way merge (and merging tree contents
together with blobs will fail).
Fix it by feeding trees (and only trees) into the recursive
merge-tree machinery and blobs (and only blobs) into the three-way
content level merge machinery separately; when this happens, the
entire merge has to be marked as conflicting at the structure level.
Signed-off-by: Junio C Hamano <gitster@pobox•com>
It seems to be a vanilla null dereference:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000453bf9 in add_merge_entry (entry=0x0) at builtin/merge-tree.c:24
24 *merge_result_end = entry;
(gdb) bt
#0 0x0000000000453bf9 in add_merge_entry (entry=0x0) at builtin/merge-tree.c:24
#1 0x00000000004545f4 in unresolved (info=0x7fffffffce90, n=0x7ff7f0) at builtin/merge-tree.c:265
#2 0x0000000000454741 in threeway_callback (n=3, mask=7, dirmask=7, entry=0x7ff7f0,
info=0x7fffffffce90) at builtin/merge-tree.c:330
#3 0x00000000005233f3 in traverse_trees (n=3, t=0x7fffffffcf10, info=0x7fffffffce90)
at tree-walk.c:407
#4 0x0000000000454792 in merge_trees_recursive (t=0x7fffffffcf10, base=0x800530 "lib/mail",
df_conflict=1) at builtin/merge-tree.c:341
#5 0x0000000000454382 in unresolved_directory (info=0x7fffffffd120, n=0x800420, df_conflict=1)
at builtin/merge-tree.c:216
#6 0x0000000000454507 in unresolved (info=0x7fffffffd120, n=0x800420) at builtin/merge-tree.c:253
#7 0x0000000000454741 in threeway_callback (n=3, mask=7, dirmask=7, entry=0x800420,
info=0x7fffffffd120) at builtin/merge-tree.c:330
#8 0x00000000005233f3 in traverse_trees (n=3, t=0x7fffffffd1a0, info=0x7fffffffd120)
at tree-walk.c:407
#9 0x0000000000454792 in merge_trees_recursive (t=0x7fffffffd1a0, base=0x7fd170 "lib", df_conflict=1)
at builtin/merge-tree.c:341
#10 0x0000000000454382 in unresolved_directory (info=0x7fffffffd3b0, n=0x8069f0, df_conflict=1)
at builtin/merge-tree.c:216
#11 0x0000000000454507 in unresolved (info=0x7fffffffd3b0, n=0x8069f0) at builtin/merge-tree.c:253
#12 0x0000000000454741 in threeway_callback (n=3, mask=7, dirmask=7, entry=0x8069f0,
info=0x7fffffffd3b0) at builtin/merge-tree.c:330
#13 0x00000000005233f3 in traverse_trees (n=3, t=0x7fffffffd450, info=0x7fffffffd3b0)
at tree-walk.c:407
#14 0x0000000000454792 in merge_trees_recursive (t=0x7fffffffd450, base=0x5510fc "", df_conflict=0)
at builtin/merge-tree.c:341
#15 0x00000000004547bc in merge_trees (t=0x7fffffffd450, base=0x5510fc "") at builtin/merge-tree.c:346
#16 0x00000000004548ef in cmd_merge_tree (argc=4, argv=0x7fffffffd728, prefix=0x0)
at builtin/merge-tree.c:373
#17 0x00000000004056ec in run_builtin (p=0x7a1c88 <commands.20888+1416>, argc=4, argv=0x7fffffffd728)
at git.c:273
#18 0x000000000040587f in handle_internal_command (argc=4, argv=0x7fffffffd728) at git.c:434
#19 0x0000000000405a4b in main (argc=4, argv=0x7fffffffd728) at git.c:523
Unfortunately I'm not familiar with the merge code, but if you can't
reproduce at your end let me know.
--
Thomas Rast
trast@{inf,student}.ethz.ch
next prev parent reply other threads:[~2013-03-27 15:53 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-27 15:29 Segfault with merge-tree on multiple Git versions Charlie Smurthwaite
2013-03-27 15:53 ` thomas [this message]
2013-03-27 15:58 ` John Keeping
2013-03-27 16:05 ` Thomas Rast
2013-03-27 16:33 ` Junio C Hamano
2013-03-27 17:06 ` Junio C Hamano
2013-03-27 17:17 ` Charlie Smurthwaite
2013-03-27 17:52 ` Charlie Smurthwaite
2013-03-27 18:06 ` Jed Brown
2013-03-27 18:46 ` Charlie Smurthwaite
2013-03-27 19:16 ` Jed Brown
2013-03-27 19:45 ` John Keeping
2013-03-27 20:01 ` Jeff King
2013-03-27 21:10 ` Charlie Smurthwaite
2013-03-27 20:04 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87boa47saw.fsf@linux-k42r.v.cablecom.net \
--to=trast@student$(echo .)ethz.ch \
--cc=charlie@atechmedia$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
--cc=gitster@pobox$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox