diff options
author | Bruno Haible <bruno@clisp.org> | 2016-10-14 02:49:05 +0200 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2016-10-15 14:51:09 +0200 |
commit | 794b3480e3c1a46d23e42491c39e332ebd3ccbc8 (patch) | |
tree | c20ca0d82ad8a07eb2c88335d6199ef8bc853136 /lib/canonicalize-lgpl.c | |
parent | 7dad5f25591de682c452c3fc39ffe2fa11e21491 (diff) | |
download | gnulib-794b3480e3c1a46d23e42491c39e332ebd3ccbc8.tar.gz |
canonicalize-lgpl: Support the case path_max > INT_MAX.
* lib/canonicalize-lgpl.c (__realpath): Declare n as ssize_t, not int.
Diffstat (limited to 'lib/canonicalize-lgpl.c')
-rw-r--r-- | lib/canonicalize-lgpl.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/canonicalize-lgpl.c b/lib/canonicalize-lgpl.c index 4a38a4610e..7f54008a74 100644 --- a/lib/canonicalize-lgpl.c +++ b/lib/canonicalize-lgpl.c @@ -194,7 +194,6 @@ __realpath (const char *name, char *resolved) #else struct stat st; #endif - int n; /* Skip sequence of multiple path-separators. */ while (ISSLASH (*start)) @@ -275,6 +274,7 @@ __realpath (const char *name, char *resolved) { char *buf; size_t len; + ssize_t n; if (++num_links > MAXSYMLINKS) { @@ -311,7 +311,8 @@ __realpath (const char *name, char *resolved) } len = strlen (end); - if ((long int) (n + len) >= path_max) + /* Check that n + len + 1 doesn't overflow and is <= path_max. */ + if (n >= SIZE_MAX - len || n + len >= path_max) { freea (buf); __set_errno (ENAMETOOLONG); |