e1103ec55ff24a5dc912bc5b9255fc806d346d69
[external/busybox.git] / util-linux / packaging / readlink-use-xmalloc_realpath.patch
1 From b175462422f02a159a14dc5561d8bef6f84b2b66 Mon Sep 17 00:00:00 2001
2 From: Jeremie Koenig <jk@jk.fr.eu.org>
3 Date: Thu, 27 May 2010 15:32:19 +0200
4 Subject: [PATCH 1/9] readlink: use xmalloc_realpath()
5
6 Using realpath() directly with a non-NULL output buffer is unsafe because its
7 behavior is unspecified on systems which don't have PATH_MAX (ie. Hurd)
8
9 I beleive this also fixes a small bug whereby 'buf' would not be freed
10 on 'readlink -v' with ENABLE_FEATURE_CLEANUP.
11
12 Signed-off-by: Jeremie Koenig <jk@jk.fr.eu.org>
13 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
14 ---
15  coreutils/readlink.c |    5 ++---
16  1 files changed, 2 insertions(+), 3 deletions(-)
17
18 diff --git a/coreutils/readlink.c b/coreutils/readlink.c
19 index 20df38b..2ed5e2c 100644
20 --- a/coreutils/readlink.c
21 +++ b/coreutils/readlink.c
22 @@ -36,7 +36,6 @@ int readlink_main(int argc UNUSED_PARAM, char **argv)
23  {
24         char *buf;
25         char *fname;
26 -       char pathbuf[PATH_MAX];
27  
28         IF_FEATURE_READLINK_FOLLOW(
29                 unsigned opt;
30 @@ -56,7 +55,7 @@ int readlink_main(int argc UNUSED_PARAM, char **argv)
31                 logmode = LOGMODE_NONE;
32  
33         if (opt & 1) { /* -f */
34 -               buf = realpath(fname, pathbuf);
35 +               buf = xmalloc_realpath(fname);
36         } else {
37                 buf = xmalloc_readlink_or_warn(fname);
38         }
39 @@ -65,7 +64,7 @@ int readlink_main(int argc UNUSED_PARAM, char **argv)
40                 return EXIT_FAILURE;
41         printf((opt & 2) ? "%s" : "%s\n", buf);
42  
43 -       if (ENABLE_FEATURE_CLEAN_UP && !opt)
44 +       if (ENABLE_FEATURE_CLEAN_UP)
45                 free(buf);
46  
47         fflush_stdout_and_exit(EXIT_SUCCESS);
48 -- 
49 1.7.1
50