On 2025-08-11 at 19:06:39, Junio C Hamano wrote: > diff --git a/object-name.c b/object-name.c > index 11aa0e6afc..8f9af57c0a 100644 > --- a/object-name.c > +++ b/object-name.c > @@ -680,6 +680,7 @@ static unsigned msb(unsigned long val) > struct min_abbrev_data { > unsigned int init_len; > unsigned int cur_len; > + unsigned int max_len; > char *hex; > struct repository *repo; > const struct object_id *oid; > @@ -699,12 +700,12 @@ static inline char get_hex_char_from_oid(const struct object_id *oid, > static int extend_abbrev_len(const struct object_id *oid, void *cb_data) > { > struct min_abbrev_data *mad = cb_data; > - > unsigned int i = mad->init_len; > + > while (mad->hex[i] && mad->hex[i] == get_hex_char_from_oid(oid, i)) > i++; > > - if (i < GIT_MAX_RAWSZ && i >= mad->cur_len) > + if (mad->cur_len <= i && i < mad->max_len) > mad->cur_len = i + 1; > > return 0; > @@ -864,6 +865,7 @@ int repo_find_unique_abbrev_r(struct repository *r, char *hex, > mad.repo = r; > mad.init_len = len; > mad.cur_len = len; > + mad.max_len = hexsz; > mad.hex = hex; > mad.oid = oid; This definitely looks more sensible, since we're using the algorithm specified in the passed in `oid` variable in `repo_find_unique_abbrev_r` to determine the length. I will admit that despite having touched this code recently in my SHA-1/SHA-256 interoperability work, I'm definitely not an expert in this area, so while I don't see anything that stands out to me as wrong, you probably will want someone else to verify here. -- brian m. carlson (they/them) Toronto, Ontario, CA
Attachment:
signature.asc
Description: PGP signature