shithub: riscv

Download patch

ref: 2db3642b8d3b871c6f9d1f4e3204b2f44fc4b79f
parent: f09788364452d6921d555587196f5453e1259257
author: Ori Bernstein <ori@eigenstate.org>
date: Fri Dec 18 02:16:29 EST 2020

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.

--- a/sys/src/ape/lib/ap/gen/strndup.c
+++ b/sys/src/ape/lib/ap/gen/strndup.c
@@ -8,13 +8,11 @@
 	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;
 }