]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-objects: clamp negative window size to 0
authorJeff King <peff@peff.net>
Sat, 1 May 2021 14:03:37 +0000 (10:03 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 3 May 2021 05:29:27 +0000 (14:29 +0900)
A negative window size makes no sense, and the code in find_deltas() is
not prepared to handle it. If you pass "-1", for example, we end up
generate a 0-length array of "struct unpacked", but our loop assumes it
has at least one entry in it (and we end up reading garbage memory).

We could complain to the user about this, but it's more forgiving to
just clamp it to 0, which means "do not find any deltas at all". The
0-case is already tested earlier in the script, so we'll make sure this
does the same thing.

Reported-by: Yiyuan guo <yguoaz@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/pack-objects.c
t/t5300-pack-object.sh

index 6d13cd3e1aa9903fa87cdb25c5f85365eb802280..ea7a5b3ba56f08b0fd75821a87fe8a6830982246 100644 (file)
@@ -3871,6 +3871,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
                        (1U << OE_Z_DELTA_BITS) - 1);
                cache_max_small_delta_size = (1U << OE_Z_DELTA_BITS) - 1;
        }
+       if (window < 0)
+               window = 0;
 
        strvec_push(&rp, "pack-objects");
        if (thin) {
index 887e2d8d884a1ea763c076e278203293c40df99f..5c5e53f0be9e2073a1e81ffe4c3323c1c784e4da 100755 (executable)
@@ -613,4 +613,9 @@ test_expect_success '--stdin-packs with broken links' '
        )
 '
 
+test_expect_success 'negative window clamps to 0' '
+       git pack-objects --progress --window=-1 neg-window <obj-list 2>stderr &&
+       check_deltas stderr = 0
+'
+
 test_done