summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2021-05-01 14:03:37 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-05-03 05:29:27 (GMT)
commit953aa54e1a6a7571d48eddea3ee68745bf94e69d (patch)
tree88a341bab20d94eb621c8313980576bd313133e2
parent95356789ee5e65abbdf3f354b8be4c79b196e8a1 (diff)
downloadgit-953aa54e1a6a7571d48eddea3ee68745bf94e69d.zip
git-953aa54e1a6a7571d48eddea3ee68745bf94e69d.tar.gz
git-953aa54e1a6a7571d48eddea3ee68745bf94e69d.tar.bz2
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>
-rw-r--r--builtin/pack-objects.c2
-rwxr-xr-xt/t5300-pack-object.sh5
2 files changed, 7 insertions, 0 deletions
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 6d13cd3..ea7a5b3 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -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) {
diff --git a/t/t5300-pack-object.sh b/t/t5300-pack-object.sh
index 887e2d8..5c5e53f 100755
--- a/t/t5300-pack-object.sh
+++ b/t/t5300-pack-object.sh
@@ -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