t/helper: fix segfault in "oid-array" command without repository

The "oid-array" test helper can supposedly work without a Git
repository, but will in fact crash because `the_repository->hash_algo`
is not initialized. This is because `oid_pos()`, which is used by
`oid_array_lookup()`, depends on `the_hash_algo->rawsz`.

Ideally, we'd adapt `oid_pos()` to not depend on `the_hash_algo`
anymore. That is a bigger untertaking though, so instead we fall back to
SHA1 when there is no repository.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Patrick Steinhardt 2024-06-14 08:51:05 +02:00 committed by Junio C Hamano
parent fa9e009aa7
commit 8e9a1d0dc2
2 changed files with 22 additions and 0 deletions

View File

@ -1,3 +1,5 @@
#define USE_THE_REPOSITORY_VARIABLE

#include "test-tool.h"
#include "hex.h"
#include "oid-array.h"
@ -17,6 +19,8 @@ int cmd__oid_array(int argc UNUSED, const char **argv UNUSED)
int nongit_ok;

setup_git_directory_gently(&nongit_ok);
if (nongit_ok)
repo_set_hash_algo(the_repository, GIT_HASH_SHA1);

while (strbuf_getline(&line, stdin) != EOF) {
const char *arg;

View File

@ -15,6 +15,24 @@ echoid () {
done
}

test_expect_success 'without repository' '
cat >expect <<-EOF &&
4444444444444444444444444444444444444444
5555555555555555555555555555555555555555
8888888888888888888888888888888888888888
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
EOF
cat >input <<-EOF &&
append 4444444444444444444444444444444444444444
append 5555555555555555555555555555555555555555
append 8888888888888888888888888888888888888888
append aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
for_each_unique
EOF
nongit test-tool oid-array <input >actual &&
test_cmp expect actual
'

test_expect_success 'ordered enumeration' '
echoid "" 44 55 88 aa >expect &&
{