From 2db3642b8d3b871c6f9d1f4e3204b2f44fc4b79f Mon Sep 17 00:00:00 2001 From: Ori Bernstein Date: Fri, 18 Dec 2020 07:16:29 -0800 Subject: [PATCH] strndup: don't assume buffer is terminated Using strlen in strndup will walk past the first n bytes up to the terminator, which may not be present. This is not what we want. While we're here, do some cleanups. --- sys/src/ape/lib/ap/gen/strndup.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/sys/src/ape/lib/ap/gen/strndup.c b/sys/src/ape/lib/ap/gen/strndup.c index b60e2da2b..ef9d447df 100644 --- a/sys/src/ape/lib/ap/gen/strndup.c +++ b/sys/src/ape/lib/ap/gen/strndup.c @@ -8,13 +8,11 @@ strndup(char *p, size_t max) int n; char *np; - n = strlen(p)+1; - if(n > max) - n = max+1; - np = malloc(n); + n = strnlen(p, max); + np = malloc(n+1); if(!np) - return nil; - memmove(np, p, n); - np[n-1] = 0; + return NULL; + memcpy(np, p, n); + np[n] = 0; return np; }