]> git.ipfire.org Git - thirdparty/git.git/commitdiff
write_reuse_object(): convert to new revindex API
authorTaylor Blau <me@ttaylorr.com>
Wed, 13 Jan 2021 22:23:35 +0000 (17:23 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 14 Jan 2021 05:53:45 +0000 (21:53 -0800)
First replace 'find_pack_revindex()' with its replacement
'offset_to_pack_pos()'. This prevents any bogus OFS_DELTA that may make
its way through until 'write_reuse_object()' from causing a bad memory
read (if 'revidx' is 'NULL')

Next, replace a direct access of '->nr' with the wrapper function
'pack_pos_to_index()'.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/pack-objects.c

index 2a00358f3452febd9c647cdb9029e5a04f89833d..ab1fd853f1ea093659e101b738aa6f35501ca897 100644 (file)
@@ -419,7 +419,7 @@ static off_t write_reuse_object(struct hashfile *f, struct object_entry *entry,
 {
        struct packed_git *p = IN_PACK(entry);
        struct pack_window *w_curs = NULL;
-       struct revindex_entry *revidx;
+       uint32_t pos;
        off_t offset;
        enum object_type type = oe_type(entry);
        off_t datalen;
@@ -436,10 +436,15 @@ static off_t write_reuse_object(struct hashfile *f, struct object_entry *entry,
                                              type, entry_size);
 
        offset = entry->in_pack_offset;
-       revidx = find_pack_revindex(p, offset);
-       datalen = revidx[1].offset - offset;
+       if (offset_to_pack_pos(p, offset, &pos) < 0)
+               die(_("write_reuse_object: could not locate %s, expected at "
+                     "offset %"PRIuMAX" in pack %s"),
+                   oid_to_hex(&entry->idx.oid), (uintmax_t)offset,
+                   p->pack_name);
+       datalen = pack_pos_to_offset(p, pos + 1) - offset;
        if (!pack_to_stdout && p->index_version > 1 &&
-           check_pack_crc(p, &w_curs, offset, datalen, revidx->nr)) {
+           check_pack_crc(p, &w_curs, offset, datalen,
+                          pack_pos_to_index(p, pos))) {
                error(_("bad packed object CRC for %s"),
                      oid_to_hex(&entry->idx.oid));
                unuse_pack(&w_curs);