From: "Mantas Mikulėnas" <grawity@gmail.com>
To: git@vger.kernel.org
Subject: Segfault in `git describe`
Date: Sat, 13 Jul 2013 16:27:33 +0300 [thread overview]
Message-ID: <krrkk0$kri$1@ger.gmane.org> (raw)
I have a clone of linux.git with various stuff added to it (remotes for
'stable' and 'next', a bunch of local tags, and historical repositories
imported using `git replace`).
Yesterday, I noticed that `git describe`, built from git.git master
(v1.8.3.2-804-g0da7a53, gcc 4.8) would simply crash when run in that
repository, with the following backtrace:
> Program terminated with signal 11, Segmentation fault.
> #0 0x00000000004c39dc in hashcpy (sha_src=0x1c <Address 0x1c out of bounds>,
> sha_dst=0x7fffc0b4d610 "\242\271\301\366 \201&\346\337l\002B\214P\037\210ShX\022")
> at cache.h:694
> 694 memcpy(sha_dst, sha_src, 20);
> (gdb) bt
> #0 0x00000000004c39dc in hashcpy (sha_src=0x1c <Address 0x1c out of bounds>,
> sha_dst=0x7fffc0b4d610 "\242\271\301\366 \201&\346\337l\002B\214P\037\210ShX\022")
> at cache.h:694
> #1 peel_ref (refname=refname@entry=0x1fe2d10 "refs/tags/next-20130607",
> sha1=sha1@entry=0x7fffc0b4d610 "\242\271\301\366 \201&\346\337l\002B\214P\037\210ShX\022") at refs.c:1586
> #2 0x0000000000424194 in get_name (path=0x1fe2d10 "refs/tags/next-20130607",
> sha1=0x1fe2ce8 "\222V\356\276S5\tk\231Hi\264\r=\336\315\302\225\347\257\300N\376\327\064@\237ZDq[T\246\312\033T\260\314\362\025refs/tags/next-20130607", flag=<optimized out>,
> cb_data=<optimized out>) at builtin/describe.c:156
> #3 0x00000000004c1c21 in do_one_ref (entry=0x1fe2ce0, cb_data=0x7fffc0b4d7c0)
> at refs.c:646
> #4 0x00000000004c318d in do_for_each_entry_in_dir (dir=0x1fe1728,
> offset=<optimized out>, fn=0x4c1bc0 <do_one_ref>, cb_data=0x7fffc0b4d7c0)
> at refs.c:672
> #5 0x00000000004c33d1 in do_for_each_entry_in_dirs (dir1=0x1fdf4d8, dir2=0x1fd6318,
> cb_data=0x7fffc0b4d7c0, fn=0x4c1bc0 <do_one_ref>) at refs.c:716
> #6 0x00000000004c33d1 in do_for_each_entry_in_dirs (dir1=0x1fdf1f8, dir2=0x1fd62d8,
> cb_data=0x7fffc0b4d7c0, fn=0x4c1bc0 <do_one_ref>) at refs.c:716
> #7 0x00000000004c3540 in do_for_each_entry (refs=refs@entry=0x7a2800 <ref_cache>,
> base=base@entry=0x509cc6 "", cb_data=cb_data@entry=0x7fffc0b4d7c0,
> fn=0x4c1bc0 <do_one_ref>) at refs.c:1689
> #8 0x00000000004c3ff8 in do_for_each_ref (cb_data=cb_data@entry=0x0, flags=1, trim=0,
> fn=fn@entry=0x424120 <get_name>, base=0x509cc6 "", refs=0x7a2800 <ref_cache>)
> at refs.c:1724
> #9 for_each_rawref (fn=fn@entry=0x424120 <get_name>, cb_data=cb_data@entry=0x0)
> at refs.c:1873
> #10 0x0000000000424f5b in cmd_describe (argc=0, argv=0x7fffc0b4ddc0, prefix=0x0)
> at builtin/describe.c:466
> #11 0x000000000040596d in run_builtin (argv=0x7fffc0b4ddc0, argc=1,
> p=0x760b40 <commands.21352+576>) at git.c:291
> #12 handle_internal_command (argc=1, argv=0x7fffc0b4ddc0) at git.c:453
> #13 0x0000000000404d6e in run_argv (argv=0x7fffc0b4dc78, argcp=0x7fffc0b4dc5c)
> at git.c:499
> #14 main (argc=1, av=<optimized out>) at git.c:575
> (gdb)
According to `git bisect`, the first bad commit is:
commit 9a489f3c17d6c974b18c47cf406404ca2a721c87
Author: Michael Haggerty <mhagger@alum.mit.edu>
Date: Mon Apr 22 21:52:22 2013 +0200
refs: extract a function peel_entry()
The crash happens only in repositories that have at least one replaced
object in the branch's history. Running `git --no-replace-objects
describe` avoids the crash.
The crash happens only if there are any tags under .git/refs/tags/ that
do not exist in .git/packed-refs, or if I remove all "peeled" lines from
.git/packed-refs (including the '#' line; /^[#^]/d).
A quick way to reproduce this with git.git master is:
git tag -f test-tag HEAD~10
git replace -f HEAD $(git --no-replace-objects cat-file commit HEAD \
| sed 's/@/@test/' | git hash-object --stdin -t commit -w)
./git describe
--
Mantas Mikulėnas <grawity@gmail.com>
next reply other threads:[~2013-07-13 13:28 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-13 13:27 Mantas Mikulėnas [this message]
2013-07-15 13:03 ` Segfault in `git describe` Michael Haggerty
2013-07-15 13:31 ` Mantas Mikulėnas
2013-07-15 15:24 ` [PATCH] do_one_ref(): save and restore value of current_ref Michael Haggerty
2013-07-18 4:03 ` Junio C Hamano
2013-07-19 17:43 ` Michael Haggerty
2013-07-19 19:34 ` Junio C Hamano
2013-07-24 14:35 ` Michael Haggerty
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='krrkk0$kri$1@ger.gmane.org' \
--to=grawity@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.