Git fork

rerere: tighten rr-cache dirname check

We check only that get_sha1_hex() doesn't complain, which means we'd
match an all-hex name with trailing cruft after it. This probably
doesn't matter much in practice, since there shouldn't be anything else
in the rr-cache directory, but it could possibly cause us to mix up sha1
and sha256 entries (which also shouldn't be intermingled, but could be
leftovers from a repository conversion).

Note that "get_sha1_hex()" is a confusing historical name. It is
actually using the_hash_algo, so it would be sha256 in a sha256 repo.
We'll switch to using parse_oid_hex(), because that conveniently
advances our pointer. But it also gets rid of the sha1 name. Arguably
it's a little funny to use "object_id" here for something that isn't
actually naming an object, but it's unlikely to be a problem (and is
contained in a single function).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

authored by

Jeff King and committed by
Junio C Hamano
098c173f 2bc1a87e

+3 -2
+3 -2
rerere.c
··· 1181 1181 /* Does the basename in "path" look plausibly like an rr-cache entry? */ 1182 1182 static int is_rr_cache_dirname(const char *path) 1183 1183 { 1184 - unsigned char hash[GIT_MAX_RAWSZ]; 1185 - return !get_sha1_hex(path, hash); 1184 + struct object_id oid; 1185 + const char *end; 1186 + return !parse_oid_hex(path, &oid, &end) && !*end; 1186 1187 } 1187 1188 1188 1189 void rerere_gc(struct repository *r, struct string_list *rr)