From: Junio C Hamano Date: Thu, 8 Mar 2018 20:36:26 +0000 (-0800) Subject: Merge branch 'ds/find-unique-abbrev-optim' X-Git-Tag: v2.17.0-rc0~26 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/7519a60ffa3f811ec49fd9956e284ff90f3b1cf1?hp=65ebfec5154c32e60efbec318e23110a1660809c Merge branch 'ds/find-unique-abbrev-optim' While finding unique object name abbreviation, the code may accidentally have read beyond the end of the array of object names in a pack. * ds/find-unique-abbrev-optim: sha1_name: fix uninitialized memory errors --- diff --git a/sha1_name.c b/sha1_name.c index e7c18ffc26..735c1c0b8e 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -542,20 +542,20 @@ static void find_abbrev_len_for_pack(struct packed_git *p, /* * first is now the position in the packfile where we would insert * mad->hash if it does not exist (or the position of mad->hash if - * it does exist). Hence, we consider a maximum of three objects + * it does exist). Hence, we consider a maximum of two objects * nearby for the abbreviation length. */ mad->init_len = 0; if (!match) { - nth_packed_object_oid(&oid, p, first); - extend_abbrev_len(&oid, mad); + if (nth_packed_object_oid(&oid, p, first)) + extend_abbrev_len(&oid, mad); } else if (first < num - 1) { - nth_packed_object_oid(&oid, p, first + 1); - extend_abbrev_len(&oid, mad); + if (nth_packed_object_oid(&oid, p, first + 1)) + extend_abbrev_len(&oid, mad); } if (first > 0) { - nth_packed_object_oid(&oid, p, first - 1); - extend_abbrev_len(&oid, mad); + if (nth_packed_object_oid(&oid, p, first - 1)) + extend_abbrev_len(&oid, mad); } mad->init_len = mad->cur_len; }