aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDerrick Stolee <stolee@gmail.com>2025-01-27 19:02:34 +0000
committerJunio C Hamano <gitster@pobox.com>2025-01-27 13:21:43 -0800
commitb4cf68476a983ff063846b43cd46ee9805f2c0bb (patch)
treee861c1996a8415c3290072b14e16f6ced4d78d72
parent7f9870794f743922aff6caa24e1991d5600b1b8a (diff)
downloadgit-b4cf68476a983ff063846b43cd46ee9805f2c0bb.tar.gz
pack-objects: prevent name hash version change
When the --name-hash-version option is used in 'git pack-objects', it can change from the initial assignment to when it is used based on interactions with other arguments. Specifically, when writing or reading bitmaps, we must force version 1 for now. This could change in the future when the bitmap format can store a name hash version value, indicating which was used during the writing of the packfile. Protect the 'git pack-objects' process from getting confused by failing with a BUG() statement if the value of the name hash version changes between calls to pack_name_hash_fn(). Signed-off-by: Derrick Stolee <stolee@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/pack-objects.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 8ae77deb92..fa09a35cf5 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -284,6 +284,14 @@ static void validate_name_hash_version(void)
static inline uint32_t pack_name_hash_fn(const char *name)
{
+ static int seen_version = -1;
+
+ if (seen_version < 0)
+ seen_version = name_hash_version;
+ else if (seen_version != name_hash_version)
+ BUG("name hash version changed from %d to %d mid-process",
+ seen_version, name_hash_version);
+
switch (name_hash_version) {
case 1:
return pack_name_hash(name);