From: Junio C Hamano Date: Thu, 05 Apr 2007 22:51:36 GMT Subject: Re: [PATCH 02/13] declare overflow during base128 decoding when 1 MSB nonzero, not 7 Message-ID: <7vr6qymo3r.fsf@assigned-by-dhcp.cox.net> In-Reply-To: <56b7f5510704051524p28eafc18mae3131ef13cdabfa@mail.gmail.com> "Dana How" writes: > 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?