diff --git a/stdlib/canonicalize.c b/stdlib/canonicalize.c index cbd885a3c5..ddeea3e2e9 100644 --- a/stdlib/canonicalize.c +++ b/stdlib/canonicalize.c @@ -42,7 +42,7 @@ char * __realpath (const char *name, char *resolved) { - char *rpath, *dest, *extra_buf = NULL; + char *rpath, *dest, *buf = NULL, *extra_buf = NULL; const char *start, *end, *rpath_limit; long int path_max; int num_links = 0; @@ -163,7 +163,6 @@ __realpath (const char *name, char *resolved) if (S_ISLNK (st.st_mode)) { - char *buf = __alloca (path_max); size_t len; if (++num_links > __eloop_threshold ()) @@ -172,6 +171,8 @@ __realpath (const char *name, char *resolved) goto error; } + if (!buf) + buf = __alloca (path_max); n = __readlink (rpath, buf, path_max - 1); if (n < 0) goto error;