mirror of
https://github.com/sheumann/hush.git
synced 2024-08-21 11:28:57 +00:00
readlink: use xmalloc_realpath()
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>
This commit is contained in:
parent
daf286cda5
commit
b175462422
@ -36,7 +36,6 @@ int readlink_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
{
|
{
|
||||||
char *buf;
|
char *buf;
|
||||||
char *fname;
|
char *fname;
|
||||||
char pathbuf[PATH_MAX];
|
|
||||||
|
|
||||||
IF_FEATURE_READLINK_FOLLOW(
|
IF_FEATURE_READLINK_FOLLOW(
|
||||||
unsigned opt;
|
unsigned opt;
|
||||||
@ -56,7 +55,7 @@ int readlink_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
logmode = LOGMODE_NONE;
|
logmode = LOGMODE_NONE;
|
||||||
|
|
||||||
if (opt & 1) { /* -f */
|
if (opt & 1) { /* -f */
|
||||||
buf = realpath(fname, pathbuf);
|
buf = xmalloc_realpath(fname);
|
||||||
} else {
|
} else {
|
||||||
buf = xmalloc_readlink_or_warn(fname);
|
buf = xmalloc_readlink_or_warn(fname);
|
||||||
}
|
}
|
||||||
@ -65,7 +64,7 @@ int readlink_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
printf((opt & 2) ? "%s" : "%s\n", buf);
|
printf((opt & 2) ? "%s" : "%s\n", buf);
|
||||||
|
|
||||||
if (ENABLE_FEATURE_CLEAN_UP && !opt)
|
if (ENABLE_FEATURE_CLEAN_UP)
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
fflush_stdout_and_exit(EXIT_SUCCESS);
|
fflush_stdout_and_exit(EXIT_SUCCESS);
|
||||||
|
Loading…
Reference in New Issue
Block a user