Fix calling __dns_parse with potentially too large rlen

__res_send returns the full answer length even if it didn't fit the
buffer, but __dns_parse expects the length of the filled part of the
buffer.

Analogous to Musl commit 77327ed064bd57b0e1865cd0e0364057ff4a53b4 which
fixed the only other __dns_parse call site.
This commit is contained in:
Alexey Izbyshev 2024-04-23 09:35:30 -07:00 committed by Justine Tunney
parent 6992d8c195
commit f8c0186221
No known key found for this signature in database
GPG key ID: BE714B4575D6E328

View file

@ -206,8 +206,10 @@ int getnameinfo(const struct sockaddr *restrict sa, socklen_t sl,
query[3] = 0; /* don't need AD flag */
int rlen = __res_send(query, qlen, reply, sizeof reply);
buf[0] = 0;
if (rlen > 0)
if (rlen > 0) {
if (rlen > sizeof reply) rlen = sizeof reply;
__dns_parse(reply, rlen, dns_parse_callback, buf);
}
}
if (!*buf) {
if (flags & NI_NAMEREQD) return EAI_NONAME;