Skip to content

Commit 69160f2

Browse files
authored
gh-159739: Account for NUL terminators in fallback getnameinfo (#159991)
Backport to 3.15 and 3.14.
1 parent c1e20aa commit 69160f2

2 files changed

Lines changed: 7 additions & 5 deletions

File tree

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix off-by-one output buffer checks in the fallback implementation of
2+
``getnameinfo()``.

‎Modules/getnameinfo.c‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,13 @@ getnameinfo(const struct sockaddr *sa, size_t salen, char *host, size_t hostlen,
130130
/* what we should do? */
131131
} else if (flags & NI_NUMERICSERV) {
132132
sprintf(numserv, "%d", ntohs(port));
133-
if (strlen(numserv) > servlen)
133+
if (strlen(numserv) >= servlen)
134134
return ENI_MEMORY;
135135
strcpy(serv, numserv);
136136
} else {
137137
sp = getservbyport(port, (flags & NI_DGRAM) ? "udp" : "tcp");
138138
if (sp) {
139-
if (strlen(sp->s_name) > servlen)
139+
if (strlen(sp->s_name) >= servlen)
140140
return ENI_MEMORY;
141141
strcpy(serv, sp->s_name);
142142
} else
@@ -166,7 +166,7 @@ getnameinfo(const struct sockaddr *sa, size_t salen, char *host, size_t hostlen,
166166
if (inet_ntop(gni_afd->a_af, addr, numaddr, sizeof(numaddr))
167167
== NULL)
168168
return ENI_SYSTEM;
169-
if (strlen(numaddr) > hostlen)
169+
if (strlen(numaddr) >= hostlen)
170170
return ENI_MEMORY;
171171
strcpy(host, numaddr);
172172
} else {
@@ -181,7 +181,7 @@ getnameinfo(const struct sockaddr *sa, size_t salen, char *host, size_t hostlen,
181181
p = strchr(hp->h_name, '.');
182182
if (p) *p = '\0';
183183
}
184-
if (strlen(hp->h_name) > hostlen) {
184+
if (strlen(hp->h_name) >= hostlen) {
185185
#ifdef ENABLE_IPV6
186186
freehostent(hp);
187187
#endif
@@ -197,7 +197,7 @@ getnameinfo(const struct sockaddr *sa, size_t salen, char *host, size_t hostlen,
197197
if (inet_ntop(gni_afd->a_af, addr, numaddr, sizeof(numaddr))
198198
== NULL)
199199
return ENI_NOHOSTNAME;
200-
if (strlen(numaddr) > hostlen)
200+
if (strlen(numaddr) >= hostlen)
201201
return ENI_MEMORY;
202202
strcpy(host, numaddr);
203203
}

0 commit comments

Comments
 (0)