pack-objects: clamp negative window size to 0
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>
Jeff King committed
May 1, 2021 at 10:03 UTC
953aa54e1a6a7571d48eddea3ee68745bf94e69d
2 files changed
+7
builtin/pack-objects.c
+2
@@ -3871,6 +3871,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
3871
(1U << OE_Z_DELTA_BITS) - 1);
3872
cache_max_small_delta_size = (1U << OE_Z_DELTA_BITS) - 1;
3873
}
3874
+ if (window < 0)
3875
+ window = 0;
3876
3877
strvec_push(&rp, "pack-objects");
3878
if (thin) {
t/t5300-pack-object.sh
+5
@@ -613,4 +613,9 @@ test_expect_success '--stdin-packs with broken links' '
613
)
614
'
615
616
+test_expect_success 'negative window clamps to 0' '
617
+ git pack-objects --progress --window=-1 neg-window <obj-list 2>stderr &&
618
+ check_deltas stderr = 0
619
+'
620
+
621
test_done