make_absolute_path(): check bounds when seeing an overlong symlink
authorJunio C Hamano <gitster@pobox.com>
Wed, 17 Dec 2008 20:37:48 +0000 (12:37 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 17 Dec 2008 21:36:34 +0000 (13:36 -0800)
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
abspath.c

index 8194ce1..649f34f 100644 (file)
--- a/abspath.c
+++ b/abspath.c
@@ -64,6 +64,8 @@ const char *make_absolute_path(const char *path)
                        len = readlink(buf, next_buf, PATH_MAX);
                        if (len < 0)
                                die ("Invalid symlink: %s", buf);
                        len = readlink(buf, next_buf, PATH_MAX);
                        if (len < 0)
                                die ("Invalid symlink: %s", buf);
+                       if (PATH_MAX <= len)
+                               die("symbolic link too long: %s", buf);
                        next_buf[len] = '\0';
                        buf = next_buf;
                        buf_index = 1 - buf_index;
                        next_buf[len] = '\0';
                        buf = next_buf;
                        buf_index = 1 - buf_index;