]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t/helper: fix segfault in "oid-array" command without repository
authorPatrick Steinhardt <ps@pks.im>
Fri, 14 Jun 2024 06:51:05 +0000 (08:51 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 14 Jun 2024 17:26:34 +0000 (10:26 -0700)
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>
t/helper/test-oid-array.c
t/t0064-oid-array.sh

index aafe398ef07e538ef774fedc72cd27189391f2fb..076b849cbf883f67ffffbc70292e13174741b976 100644 (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;
index 88c89e8f48ac1082892734c5bdb0e73a796f74f0..de74b692d0cfc54eb694f3407f810c852cf200e8 100755 (executable)
@@ -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 &&
        {