From 1ecc18e4fc0c91e9cab1aafbedb0eebdebaa8dd3 Mon Sep 17 00:00:00 2001
From: Junio C Hamano <junkio@cox.net>
Date: Fri, 27 Jan 2006 14:44:07 -0800
Subject: [PATCH] checkout: do not make a temporary copy of symlink target.

If the index records an insanely long symbolic link, copying
into the temporary would overflow the buffer (noticed by Mark
Wooding).

Because read_sha1_file() terminates the returned buffer with NUL
since late May 2005, there is no reason to copy it anymore.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
 entry.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/entry.c b/entry.c
index 410b758aab7..6c47c3a3e1a 100644
--- a/entry.c
+++ b/entry.c
@@ -70,7 +70,6 @@ static int write_entry(struct cache_entry *ce, const char *path, struct checkout
 	unsigned long size;
 	long wrote;
 	char type[20];
-	char target[1024];
 
 	new = read_sha1_file(ce->sha1, type, &size);
 	if (!new || strcmp(type, "blob")) {
@@ -94,12 +93,10 @@ static int write_entry(struct cache_entry *ce, const char *path, struct checkout
 			return error("git-checkout-index: unable to write file %s", path);
 		break;
 	case S_IFLNK:
-		memcpy(target, new, size);
-		target[size] = '\0';
-		if (symlink(target, path)) {
+		if (symlink(new, path)) {
 			free(new);
-			return error("git-checkout-index: unable to create symlink %s (%s)",
-				path, strerror(errno));
+			return error("git-checkout-index: unable to create "
+				     "symlink %s (%s)", path, strerror(errno));
 		}
 		free(new);
 		break;