pack-bitmap: make bitmap header handling hash agnostic

Increase the checksum field in struct bitmap_disk_header to be
GIT_MAX_RAWSZ bytes in length and ensure that we hash the proper number
of bytes out when computing the bitmap checksum.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
brian m. carlson 2019-02-19 00:04:54 +00:00 committed by Junio C Hamano
parent 5a8643eff1
commit 0f4d6cada8
3 changed files with 3 additions and 3 deletions

View file

@ -535,7 +535,7 @@ void bitmap_writer_finish(struct pack_idx_entry **index,
header.entry_count = htonl(writer.selected_nr); header.entry_count = htonl(writer.selected_nr);
hashcpy(header.checksum, writer.pack_checksum); hashcpy(header.checksum, writer.pack_checksum);
hashwrite(f, &header, sizeof(header)); hashwrite(f, &header, sizeof(header) - GIT_MAX_RAWSZ + the_hash_algo->rawsz);
dump_bitmap(f, writer.commits); dump_bitmap(f, writer.commits);
dump_bitmap(f, writer.trees); dump_bitmap(f, writer.trees);
dump_bitmap(f, writer.blobs); dump_bitmap(f, writer.blobs);

View file

@ -163,7 +163,7 @@ static int load_bitmap_header(struct bitmap_index *index)
} }
index->entry_count = ntohl(header->entry_count); index->entry_count = ntohl(header->entry_count);
index->map_pos += sizeof(*header); index->map_pos += sizeof(*header) - GIT_MAX_RAWSZ + the_hash_algo->rawsz;
return 0; return 0;
} }

View file

@ -14,7 +14,7 @@ struct bitmap_disk_header {
uint16_t version; uint16_t version;
uint16_t options; uint16_t options;
uint32_t entry_count; uint32_t entry_count;
unsigned char checksum[20]; unsigned char checksum[GIT_MAX_RAWSZ];
}; };
static const char BITMAP_IDX_SIGNATURE[] = {'B', 'I', 'T', 'M'}; static const char BITMAP_IDX_SIGNATURE[] = {'B', 'I', 'T', 'M'};