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:

committed by
Junio C Hamano

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 packed_git *p = IN_PACK(entry);
|
||||||
struct pack_window *w_curs = NULL;
|
struct pack_window *w_curs = NULL;
|
||||||
struct revindex_entry *revidx;
|
uint32_t pos;
|
||||||
off_t offset;
|
off_t offset;
|
||||||
enum object_type type = oe_type(entry);
|
enum object_type type = oe_type(entry);
|
||||||
off_t datalen;
|
off_t datalen;
|
||||||
@ -436,10 +436,15 @@ static off_t write_reuse_object(struct hashfile *f, struct object_entry *entry,
|
|||||||
type, entry_size);
|
type, entry_size);
|
||||||
|
|
||||||
offset = entry->in_pack_offset;
|
offset = entry->in_pack_offset;
|
||||||
revidx = find_pack_revindex(p, offset);
|
if (offset_to_pack_pos(p, offset, &pos) < 0)
|
||||||
datalen = revidx[1].offset - offset;
|
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 &&
|
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"),
|
error(_("bad packed object CRC for %s"),
|
||||||
oid_to_hex(&entry->idx.oid));
|
oid_to_hex(&entry->idx.oid));
|
||||||
unuse_pack(&w_curs);
|
unuse_pack(&w_curs);
|
||||||
|
Reference in New Issue
Block a user