write_reuse_object(): convert to new revindex API
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>
This commit is contained in:
parent
f33fb6e419
commit
952fc6870d
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user