manifest: rewrite pathlen() to not cross entry boundary stable
authorYuya Nishihara <yuya@tcha.org>
Wed, 05 Sep 2018 21:32:45 +0900
branchstable
changeset 39939 e85462d48cb3
parent 39809 23a00bc90a3c
child 39940 5405cb1a7901
manifest: rewrite pathlen() to not cross entry boundary Even though the entire manifest data should be terminated by '\0', it seems not nice to scan '\0' over the entry terminator, '\n'.
mercurial/cext/manifest.c
--- a/mercurial/cext/manifest.c	Wed Sep 26 21:24:14 2018 +0900
+++ b/mercurial/cext/manifest.c	Wed Sep 05 21:32:45 2018 +0900
@@ -42,7 +42,8 @@
 /* get the length of the path for a line */
 static size_t pathlen(line *l)
 {
-	return strlen(l->start);
+	const char *end = memchr(l->start, '\0', l->len);
+	return (end) ? (size_t)(end - l->start) : l->len;
 }
 
 /* get the node value of a single line */