Thanks everyone for taking a look. Here's a reroll with safer path handling. Jonathan Tan (4): object-file: remove OBJECT_INFO_IGNORE_LOOSE object-file: refactor map_loose_object_1() object-file: emit corruption errors when detected commit: don't lazy-fetch commits commit.c | 15 ++++++- object-file.c | 108 ++++++++++++++++++++++++------------------------- object-store.h | 7 ++-- 3 files changed, 69 insertions(+), 61 deletions(-) Range-diff against v4: 1: be0b08cac2 = 1: be0b08cac2 object-file: remove OBJECT_INFO_IGNORE_LOOSE 2: 4b2fb68743 = 2: 4b2fb68743 object-file: refactor map_loose_object_1() 3: 07d28db92c ! 3: a229ea0b11 object-file: emit corruption errors when detected @@ object-file.c: static int loose_object_info(struct repository *r, int status = 0; + int fd; unsigned long mapsize; -+ const char *path; ++ const char *path = NULL; void *map; git_zstream stream; char hdr[MAX_HEADER_LEN]; @@ object-file.c: static int loose_object_info(struct repository *r, + fd = open_loose_object(r, oid, &path); + if (fd < 0) { + if (errno != ENOENT) -+ error_errno(_("unable to open loose object %s"), path); ++ error_errno(_("unable to open loose object %s"), oid_to_hex(oid)); + return -1; + } + map = map_fd(fd, path, &mapsize); @@ object-file.c: static int loose_object_info(struct repository *r, break; } -+ if (status && (flags & OBJECT_INFO_DIE_IF_CORRUPT)) ++ if (status && path && (flags & OBJECT_INFO_DIE_IF_CORRUPT)) + die(_("loose object %s (stored in %s) is corrupt"), + oid_to_hex(oid), path); + 4: 1a0cd5b244 = 4: b54972118a commit: don't lazy-fetch commits -- 2.39.0.rc1.256.g54fd8350bd-goog