Skip to content

Commit

Permalink
checkout: do not make a temporary copy of symlink target.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano committed Jan 27, 2006
1 parent e921fb8 commit 1ecc18e
Showing 1 changed file with 3 additions and 6 deletions.
9 changes: 3 additions & 6 deletions entry.c
Original file line number Diff line number Diff line change
Expand Up @@ -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")) {
Expand All @@ -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;
Expand Down

0 comments on commit 1ecc18e

Please sign in to comment.