summaryrefslogtreecommitdiffstats
path: root/lib/libc/string/strnlen.c
diff options
context:
space:
mode:
authormillert <millert@openbsd.org>2010-06-02 12:58:12 +0000
committermillert <millert@openbsd.org>2010-06-02 12:58:12 +0000
commitd2b9bf02d4ff043b5c9bcaa0ae916b0e474f3ccb (patch)
tree4dd7f964ac9a5810ec580c1d2fa01719821db0dd /lib/libc/string/strnlen.c
parentstrnlen regression tests (diff)
downloadwireguard-openbsd-d2b9bf02d4ff043b5c9bcaa0ae916b0e474f3ccb.tar.xz
wireguard-openbsd-d2b9bf02d4ff043b5c9bcaa0ae916b0e474f3ccb.zip
Avoid using and end pointer since strnlen(string, -1) is legal
and would otherwise result in overflowing the end pointer and cause strnlen() to return 0. OK sthen@
Diffstat (limited to 'lib/libc/string/strnlen.c')
-rw-r--r--lib/libc/string/strnlen.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/libc/string/strnlen.c b/lib/libc/string/strnlen.c
index 0c6df381fc7..2dc7b4fb326 100644
--- a/lib/libc/string/strnlen.c
+++ b/lib/libc/string/strnlen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strnlen.c,v 1.2 2010/05/21 06:57:45 chl Exp $ */
+/* $OpenBSD: strnlen.c,v 1.3 2010/06/02 12:58:12 millert Exp $ */
/*
* Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -23,10 +23,9 @@
size_t
strnlen(const char *str, size_t maxlen)
{
- const char *cp, *ep;
+ const char *cp;
- ep = str + maxlen;
- for (cp = str; cp < ep && *cp != '\0'; cp++)
+ for (cp = str; maxlen != 0 && *cp != '\0'; cp++, maxlen--)
;
return (size_t)(cp - str);