From: Linus Torvalds Date: Fri, 20 May 2005 14:49:17 +0000 (-0700) Subject: fsck-cache: fix segfault on nonexistent referenced object X-Git-Tag: v0.99~530 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=7c4d07c7cc8543f1000639dc19cfaacbc76e5348;p=git.git fsck-cache: fix segfault on nonexistent referenced object Noted by Frank Sorenson and Petr Baudis, patch rewritten by me. --- 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)