From 7c4d07c7cc8543f1000639dc19cfaacbc76e5348 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Fri, 20 May 2005 07:49:17 -0700 Subject: [PATCH] fsck-cache: fix segfault on nonexistent referenced object Noted by Frank Sorenson and Petr Baudis, patch rewritten by me. --- fsck-cache.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/fsck-cache.c b/fsck-cache.c index 32fa5d53e..6c65f2bb2 100644 --- a/fsck-cache.c +++ b/fsck-cache.c @@ -296,7 +296,7 @@ static int fsck_dir(int i, char *path) return 0; } -static void read_sha1_reference(const char *path) +static int read_sha1_reference(const char *path) { char hexname[60]; unsigned char sha1[20]; @@ -304,19 +304,23 @@ static void read_sha1_reference(const char *path) struct object *obj; if (fd < 0) - return; + return -1; len = read(fd, hexname, sizeof(hexname)); close(fd); if (len < 40) - return; + return -1; if (get_sha1_hex(hexname, sha1) < 0) - return; + return -1; obj = lookup_object(sha1); + if (!obj) + return error("%s: invalid sha1 pointer %.40s", path, hexname); + obj->used = 1; mark_reachable(obj, REACHABLE); + return 0; } static void find_file_objects(const char *base, const char *name) -- 2.26.2