diff options
-rw-r--r-- | src/lib/libc/net/inet_net_pton.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/lib/libc/net/inet_net_pton.c b/src/lib/libc/net/inet_net_pton.c index aaffc1802a..610036605d 100644 --- a/src/lib/libc/net/inet_net_pton.c +++ b/src/lib/libc/net/inet_net_pton.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: inet_net_pton.c,v 1.11 2021/01/19 16:43:44 florian Exp $ */ | 1 | /* $OpenBSD: inet_net_pton.c,v 1.12 2022/04/13 16:20:11 millert Exp $ */ |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * Copyright (c) 2012 by Gilles Chehade <gilles@openbsd.org> | 4 | * Copyright (c) 2012 by Gilles Chehade <gilles@openbsd.org> |
@@ -208,6 +208,7 @@ inet_net_pton_ipv6(const char *src, u_char *dst, size_t size) | |||
208 | struct in6_addr in6; | 208 | struct in6_addr in6; |
209 | int ret; | 209 | int ret; |
210 | int bits; | 210 | int bits; |
211 | size_t bytes | ||
211 | char buf[INET6_ADDRSTRLEN + sizeof("/128")]; | 212 | char buf[INET6_ADDRSTRLEN + sizeof("/128")]; |
212 | char *sep; | 213 | char *sep; |
213 | const char *errstr; | 214 | const char *errstr; |
@@ -235,10 +236,11 @@ inet_net_pton_ipv6(const char *src, u_char *dst, size_t size) | |||
235 | } | 236 | } |
236 | } | 237 | } |
237 | 238 | ||
238 | if ((bits + 7) / 8 > size) { | 239 | bytes = (bits + 7) / 8; |
240 | if (bytes > size) { | ||
239 | errno = EMSGSIZE; | 241 | errno = EMSGSIZE; |
240 | return (-1); | 242 | return (-1); |
241 | } | 243 | } |
242 | memcpy(dst, &in6.s6_addr, size); | 244 | memcpy(dst, &in6.s6_addr, bytes); |
243 | return (bits); | 245 | return (bits); |
244 | } | 246 | } |