Jeff King wrote: > Reported-by: Michael Haggerty <mhagger@xxxxxxxxxxxx> > Signed-off-by: Jeff King <peff@xxxxxxxx> > --- > sha1_file.c | 29 +++++++++-------------------- > 1 file changed, 9 insertions(+), 20 deletions(-) Thanks for tracking it down. Reviewed-by: Jonathan Nieder <jrnieder@xxxxxxxxx> [...] > +++ b/sha1_file.c [...] > @@ -427,28 +427,17 @@ static void link_alt_odb_entries(const char *alt, int len, int sep, > > static void read_info_alternates(const char * relative_base, int depth) > { > - char *map; > - size_t mapsz; > - struct stat st; > char *path; > - int fd; > + struct strbuf buf = STRBUF_INIT; > > path = xstrfmt("%s/info/alternates", relative_base); > - fd = git_open(path); > - free(path); > - if (fd < 0) > - return; > - if (fstat(fd, &st) || (st.st_size == 0)) { > - close(fd); > + if (strbuf_read_file(&buf, path, 1024) < 0) { > + free(path); > return; strbuf_read_file is careful to release buf on failure, so this doesn't leak (but it's a bit subtle). What happened to the !st.st_size case? Is it eliminated for simplicity? The rest looks good. Thanks, Jonathan