lib:roken: allow large fragmented UDP replies from glibc resolver

glibc resolver returns same answer length as buffer size when
buffer is too small for the answer.

Signed-off-by: Ivan Korytov <toreonify@altlinux.org>
This commit is contained in:
Ivan Korytov
2026-03-13 12:17:55 +03:00
committed by Nico Williams
parent 8dba1f4810
commit ffb01963fc
+7 -5
View File
@@ -568,16 +568,18 @@ dns_lookup_int(const char *domain, int rr_class, int rr_type)
fprintf(stderr, "dns_lookup(%s, %d, %s) --> %d\n",
domain, rr_class, rk_dns_type_to_string(rr_type), size);
}
if (size > len) {
if ((size == len || size <= 0) && len < rk_DNS_MAX_PACKET_SIZE) {
/* resolver may have a truncated reply or a failure occured */
len *= 2;
if (len > rk_DNS_MAX_PACKET_SIZE)
len = rk_DNS_MAX_PACKET_SIZE;
} else if (size > len) {
/* resolver thinks it know better, go for it */
len = size;
} else if (size > 0) {
/* got a good reply */
break;
} else if (size <= 0 && len < rk_DNS_MAX_PACKET_SIZE) {
len *= 2;
if (len > rk_DNS_MAX_PACKET_SIZE)
len = rk_DNS_MAX_PACKET_SIZE;
} else {
/* the end, leave */
resolve_free_handle(handle);