mirror of
https://github.com/python/cpython.git
synced 2026-10-28 10:25:05 +08:00
gh-159739: Account for NUL terminators in fallback getnameinfo (#159991)
Backport to 3.15 and 3.14.
This commit is contained in:
1 parent
c1e20aaa00
commit
69160f25dc
2 files changed
+7
-5
No files matched your search
@@ -0,0 +1,2 @@
|
||||
Fix off-by-one output buffer checks in the fallback implementation of
|
||||
``getnameinfo()``.
|
||||
@@ -130,13 +130,13 @@ getnameinfo(const struct sockaddr *sa, size_t salen, char *host, size_t hostlen,
|
||||
/* what we should do? */
|
||||
} else if (flags & NI_NUMERICSERV) {
|
||||
sprintf(numserv, "%d", ntohs(port));
|
||||
if (strlen(numserv) > servlen)
|
||||
if (strlen(numserv) >= servlen)
|
||||
return ENI_MEMORY;
|
||||
strcpy(serv, numserv);
|
||||
} else {
|
||||
sp = getservbyport(port, (flags & NI_DGRAM) ? "udp" : "tcp");
|
||||
if (sp) {
|
||||
if (strlen(sp->s_name) > servlen)
|
||||
if (strlen(sp->s_name) >= servlen)
|
||||
return ENI_MEMORY;
|
||||
strcpy(serv, sp->s_name);
|
||||
} else
|
||||
@@ -166,7 +166,7 @@ getnameinfo(const struct sockaddr *sa, size_t salen, char *host, size_t hostlen,
|
||||
if (inet_ntop(gni_afd->a_af, addr, numaddr, sizeof(numaddr))
|
||||
== NULL)
|
||||
return ENI_SYSTEM;
|
||||
if (strlen(numaddr) > hostlen)
|
||||
if (strlen(numaddr) >= hostlen)
|
||||
return ENI_MEMORY;
|
||||
strcpy(host, numaddr);
|
||||
} else {
|
||||
@@ -181,7 +181,7 @@ getnameinfo(const struct sockaddr *sa, size_t salen, char *host, size_t hostlen,
|
||||
p = strchr(hp->h_name, '.');
|
||||
if (p) *p = '\0';
|
||||
}
|
||||
if (strlen(hp->h_name) > hostlen) {
|
||||
if (strlen(hp->h_name) >= hostlen) {
|
||||
#ifdef ENABLE_IPV6
|
||||
freehostent(hp);
|
||||
#endif
|
||||
@@ -197,7 +197,7 @@ getnameinfo(const struct sockaddr *sa, size_t salen, char *host, size_t hostlen,
|
||||
if (inet_ntop(gni_afd->a_af, addr, numaddr, sizeof(numaddr))
|
||||
== NULL)
|
||||
return ENI_NOHOSTNAME;
|
||||
if (strlen(numaddr) > hostlen)
|
||||
if (strlen(numaddr) >= hostlen)
|
||||
return ENI_MEMORY;
|
||||
strcpy(host, numaddr);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user