X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=diff.c;h=66057e5d6123c52be9baf8571b3d7a43f6bbaf94;hb=4cdf78bf964912698ab33579977f21a3e0b832ed;hp=c8159183dac830bf7cba20edf480712f039d7135;hpb=47dd0d595d04ee5283dfd8a0b4cbd6e6de8ad57f;p=git.git diff --git a/diff.c b/diff.c index c8159183..66057e5d 100644 --- a/diff.c +++ b/diff.c @@ -504,9 +504,9 @@ static void prepare_temp_file(const char *name, } if (S_ISLNK(st.st_mode)) { int ret; - char *buf, buf_[1024]; - buf = ((sizeof(buf_) < st.st_size) ? - xmalloc(st.st_size) : buf_); + char buf[PATH_MAX + 1]; /* ought to be SYMLINK_MAX */ + if (sizeof(buf) <= st.st_size) + die("symlink too long: %s", name); ret = readlink(name, buf, st.st_size); if (ret < 0) die("readlink(%s)", name); @@ -650,7 +650,7 @@ static void diff_fill_sha1_info(struct diff_filespec *one) if (DIFF_FILE_VALID(one)) { if (!one->sha1_valid) { struct stat st; - if (stat(one->path, &st) < 0) + if (lstat(one->path, &st) < 0) die("stat %s", one->path); if (index_path(one->sha1, one->path, &st, 0)) die("cannot hash %s\n", one->path);