"Dana How" [off-list ref] writes:
quoted hunk
Subject: [PATCH 02/13] declare overflow during base128 decoding when 1 MSB nonzero, not 7
---
builtin-pack-objects.c | 2 +-
builtin-unpack-objects.c | 2 +-
index-pack.c | 2 +-
sha1_file.c | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c
index b5f9648..50246e1 100644
--- a/builtin-pack-objects.c
+++ b/builtin-pack-objects.c
@@ -1014,7 +1014,7 @@ static void check_object(struct object_entry *entry)
ofs = c & 127;
while (c & 128) {
ofs += 1;
- if (!ofs || ofs & ~(~0UL >> 7))
+ if (!ofs || ofs & ~(~0UL >> 1))
die("delta base offset overflow in pack for %s",
sha1_to_hex(entry->sha1));
c = buf[used_0++];
The line after these context does this:
ofs = (ofs << 7) + (c & 127);
If you do not check the top 7 bits, wouldn't you miss overflow?