builtin/shortlog: explicitly set hash algo when there is no repo
Whilst git-shortlog(1) does not explicitly need any repository information when run without reference to one, it still parses some of its arguments with parse_revision_opt() which assumes that the hash algorithm is set. However, inc8aed5e8da(repository: stop setting SHA1 as the default object hash, 2024-05-07) we stopped setting up a default hash algorithm and instead require commands to set it up explicitly. This was done for most other commands like inab274909d4(builtin/diff: explicitly set hash algo when there is no repo, 2024-05-07) but was missed for builtin/shortlog, making git-shortlog(1) segfault outside of a repository when given arguments like --author that trigger a call to parse_revision_opt(). Fix this for now by explicitly setting the hash algorithm to SHA1. Also add a regression test for the segfault. Thanks-to: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Wolfgang Müller <wolf@oriole.systems> Signed-off-by: Taylor Blau <me@ttaylorr.com>
This commit is contained in:
committed by
Taylor Blau
parent
ef8ce8f3d4
commit
b33001645e
@ -407,6 +407,18 @@ int cmd_shortlog(int argc,
|
||||
|
||||
struct parse_opt_ctx_t ctx;
|
||||
|
||||
/*
|
||||
* NEEDSWORK: Later on we'll call parse_revision_opt which relies on
|
||||
* the hash algorithm being set but since we are operating outside of a
|
||||
* Git repository we cannot determine one. This is only needed because
|
||||
* parse_revision_opt expects hexsz for --abbrev which is irrelevant
|
||||
* for shortlog outside of a git repository. For now explicitly set
|
||||
* SHA1, but ideally the parsing machinery would be split between
|
||||
* git/nongit so that we do not have to do this.
|
||||
*/
|
||||
if (nongit && !the_hash_algo)
|
||||
repo_set_hash_algo(the_repository, GIT_HASH_SHA1);
|
||||
|
||||
git_config(git_default_config, NULL);
|
||||
shortlog_init(&log);
|
||||
repo_init_revisions(the_repository, &rev, prefix);
|
||||
|
||||
@ -143,6 +143,10 @@ test_expect_success 'shortlog from non-git directory refuses extra arguments' '
|
||||
test_grep "too many arguments" out
|
||||
'
|
||||
|
||||
test_expect_success 'shortlog --author from non-git directory does not segfault' '
|
||||
nongit git shortlog --author=author </dev/null
|
||||
'
|
||||
|
||||
test_expect_success 'shortlog should add newline when input line matches wraplen' '
|
||||
cat >expect <<\EOF &&
|
||||
A U Thor (2):
|
||||
|
||||
Reference in New Issue
Block a user