On 24 April 2018 at 01:39, brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> wrote: > The code for reading certain pack v2 offsets had a hard-coded 5 > representing the number of uint32_t words that we needed to skip over. > Specify this value in terms of a value from the_hash_algo. > > Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> > --- > builtin/index-pack.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/builtin/index-pack.c b/builtin/index-pack.c > index d81473e722..c1f94a7da6 100644 > --- a/builtin/index-pack.c > +++ b/builtin/index-pack.c > @@ -1543,12 +1543,13 @@ static void read_v2_anomalous_offsets(struct packed_git *p, > { > const uint32_t *idx1, *idx2; > uint32_t i; > + const uint32_t hashwords = the_hash_algo->rawsz / sizeof(uint32_t); Should we round up? Or just what should we do if a length is not divisible by 4? (I am not aware of any such hash functions, but one could exist for all I know.) Another question is whether such an index-pack v2 will ever contain non-SHA-1 oids to begin with. I can't find anything suggesting that it could, but this is unfamiliar code to me. > /* The address of the 4-byte offset table */ > idx1 = (((const uint32_t *)p->index_data) > + 2 /* 8-byte header */ > + 256 /* fan out */ > - + 5 * p->num_objects /* 20-byte SHA-1 table */ > + + hashwords * p->num_objects /* object ID table */ > + p->num_objects /* CRC32 table */ > );