From: Amos Jeffries Date: Sun, 5 Jan 2020 13:29:29 +0000 (+0000) Subject: Fix string truncation in getnameinfo() (#462) X-Git-Tag: 4.15-20210522-snapshot~177 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c00c10c3f8b1f58d948fe2b986088ce8bf63b084;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];