Using realpath() directly with a non-NULL output buffer is unsafe because its
behavior is unspecified on systems which don't have PATH_MAX (ie. Hurd)
I beleive this also fixes a small bug whereby 'buf' would not be freed
on 'readlink -v' with ENABLE_FEATURE_CLEANUP.
Signed-off-by: Jeremie Koenig <jk@jk.fr.eu.org>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
{
char *buf;
char *fname;
- char pathbuf[PATH_MAX];
IF_FEATURE_READLINK_FOLLOW(
unsigned opt;
logmode = LOGMODE_NONE;
if (opt & 1) { /* -f */
- buf = realpath(fname, pathbuf);
+ buf = xmalloc_realpath(fname);
} else {
buf = xmalloc_readlink_or_warn(fname);
}
return EXIT_FAILURE;
printf((opt & 2) ? "%s" : "%s\n", buf);
- if (ENABLE_FEATURE_CLEAN_UP && !opt)
+ if (ENABLE_FEATURE_CLEAN_UP)
free(buf);
fflush_stdout_and_exit(EXIT_SUCCESS);