diff options
author | Rob Landley <rob@landley.net> | 2019-03-17 17:27:26 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2019-03-17 17:27:26 -0500 |
commit | 6f987c55215147d4ae18b7b4a7ddd35dda9cd01e (patch) | |
tree | 51e667a337d9feeacfaf56ccff4cc8b3184ef678 | |
parent | 51eb95b5455ad4435de0e368dcdb1008a4fd10c6 (diff) | |
download | toybox-6f987c55215147d4ae18b7b4a7ddd35dda9cd01e.tar.gz |
Fix xstrndup() bug.
Now there's a second user... the libc function already null terminates
at len+1, and it doesn't malloc the full size if strlen() smaller so
the redundant termination stomped unallocated memory. Oops.
sort.c never noticed because it calculated length to truncate or copy
existing string, so never hit this.
-rw-r--r-- | lib/xwrap.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/lib/xwrap.c b/lib/xwrap.c index d7b06c5a..c133125a 100644 --- a/lib/xwrap.c +++ b/lib/xwrap.c @@ -95,10 +95,9 @@ void *xrealloc(void *ptr, size_t size) // Die unless we can allocate a copy of this many bytes of string. char *xstrndup(char *s, size_t n) { - char *ret = strndup(s, ++n); + char *ret = strndup(s, n); if (!ret) error_exit("xstrndup"); - ret[--n] = 0; return ret; } |