better validation on delta base object offsets
[gitweb.git] / builtin-pack-objects.c
index 15914179623d27370f02908543e9f43dbe8a31b9..cc1e47f41a6c837e5be89fd3abf2ac578fb91748 100644 (file)
@@ -1038,10 +1038,10 @@ static void check_object(struct object_entry *entry)
                                c = buf[used_0++];
                                ofs = (ofs << 7) + (c & 127);
                        }
-                       if (ofs >= entry->in_pack_offset)
+                       ofs = entry->in_pack_offset - ofs;
+                       if (ofs <= 0 || ofs >= entry->in_pack_offset)
                                die("delta base offset out of bound for %s",
                                    sha1_to_hex(entry->idx.sha1));
-                       ofs = entry->in_pack_offset - ofs;
                        if (reuse_delta && !entry->preferred_base) {
                                struct revindex_entry *revidx;
                                revidx = find_pack_revindex(p, ofs);