From 2006e9f537ba327d89e546188fbcf81307ce3551 Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Tue, 27 Jun 2017 20:06:59 +0300 Subject: [PATCH] Fixed INET6 sockaddr processing in nxt_sockaddr_text(). --- src/nxt_sockaddr.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/nxt_sockaddr.c b/src/nxt_sockaddr.c index 70bdfa06..4119fe8c 100644 --- a/src/nxt_sockaddr.c +++ b/src/nxt_sockaddr.c @@ -222,7 +222,7 @@ nxt_sockaddr_text(nxt_sockaddr_t *sa) offset = offsetof(nxt_sockaddr_t, u) + sizeof(struct sockaddr_in6); sa->start = offset; - sa->address_start = offset; + sa->address_start = offset + 1; start = nxt_pointer_to(sa, offset); p = start; @@ -479,11 +479,14 @@ nxt_sockaddr_ntop(nxt_sockaddr_t *sa, u_char *buf, u_char *end, nxt_bool_t port) static u_char * nxt_inet6_ntop(u_char *addr, u_char *buf, u_char *end) { - u_char *p; - size_t zero_groups, last_zero_groups, ipv6_bytes; - nxt_uint_t i, zero_start, last_zero_start; + u_char *p; + size_t zero_groups, last_zero_groups, ipv6_bytes; + nxt_uint_t i, zero_start, last_zero_start; - if (buf + NXT_INET6_ADDR_STR_LEN > end) { + const size_t max_inet6_length = + sizeof("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") - 1; + + if (buf + max_inet6_length > end) { return buf; }