Browse Source

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>
maint
Junio C Hamano 19 years ago
parent
commit
1ecc18e4fc
  1. 9
      entry.c

9
entry.c

@ -70,7 +70,6 @@ static int write_entry(struct cache_entry *ce, const char *path, struct checkout
unsigned long size; unsigned long size;
long wrote; long wrote;
char type[20]; char type[20];
char target[1024];


new = read_sha1_file(ce->sha1, type, &size); new = read_sha1_file(ce->sha1, type, &size);
if (!new || strcmp(type, "blob")) { 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); return error("git-checkout-index: unable to write file %s", path);
break; break;
case S_IFLNK: case S_IFLNK:
memcpy(target, new, size); if (symlink(new, path)) {
target[size] = '\0';
if (symlink(target, path)) {
free(new); free(new);
return error("git-checkout-index: unable to create symlink %s (%s)", return error("git-checkout-index: unable to create "
path, strerror(errno)); "symlink %s (%s)", path, strerror(errno));
} }
free(new); free(new);
break; break;

Loading…
Cancel
Save