On Tue, Oct 15, 2024 at 7:48 AM Wolfgang Müller <wolf@oriole.systems> wrote: > 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, in c8aed5e8da (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 in ab274909d4 (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. > > Signed-off-by: Wolfgang Müller <wolf@oriole.systems> Cc:'ing Patrick since I believe he's been patching similar cases. > diff --git a/t/t4201-shortlog.sh b/t/t4201-shortlog.sh > @@ -143,6 +143,11 @@ fuzz() > +test_expect_success 'shortlog --author from non-git directory does not segfault' ' > + git log --no-expand-tabs HEAD >log && > + env GIT_DIR=non-existing git shortlog --author=author <log 2>out > +' t/test-lib-functions.sh has a handy nongit() function for running a command in a non-Git directory: nongit git shortlog --author=author <log 2>out By the way, what is the purpose of capturing output to file "out"? That file is never consulted. Also, can the original crash be reproduced without having to invoke the additional `git log`? In my tests, this is sufficient: echo | nongit git shortlog --author=author