From: Amos Jeffries Date: Sun, 5 Jan 2020 13:29:29 +0000 (+0000) Subject: Fix string truncation in getnameinfo() (#462) X-Git-Tag: SQUID_4_11~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79818d3298a5f5d5d626dd8e356930e53131db05;p=thirdparty%2Fsquid.git Fix string truncation in getnameinfo() (#462) strncpy can leave strings unterminated. Use xstrncpy instead of relying on callers to terminate their buffers. --- diff --git a/compat/getnameinfo.cc b/compat/getnameinfo.cc index 251daf6a36..c2dea9b562 100644 --- a/compat/getnameinfo.cc +++ b/compat/getnameinfo.cc @@ -203,12 +203,12 @@ found: if (sp) { if (strlen(sp->s_name) + 1 > servlen) return EAI_OVERFLOW; - strncpy(serv, sp->s_name, servlen); + xstrncpy(serv, sp->s_name, servlen); } else { snprintf(numserv, sizeof(numserv), "%u", ntohs(port)); if (strlen(numserv) + 1 > servlen) return EAI_OVERFLOW; - strncpy(serv, numserv, servlen); + xstrncpy(serv, numserv, servlen); } } @@ -301,7 +301,7 @@ found: #endif return EAI_OVERFLOW; } - strncpy(host, hp->h_name, hostlen); + xstrncpy(host, hp->h_name, hostlen); #if USE_GETIPNODEBY freehostent(hp); #endif @@ -351,7 +351,7 @@ int flags; numaddrlen = strlen(numaddr); if (numaddrlen + 1 > hostlen) /* don't forget terminator */ return EAI_OVERFLOW; - strncpy(host, numaddr, hostlen); + xstrncpy(host, numaddr, hostlen); if (((const struct sockaddr_in6 *)sa)->sin6_scope_id) { char zonebuf[SQUIDHOSTNAMELEN];