From 85ed638be3aea9c8ab6806a1fde248b10c2fee14 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Thu, 13 Jul 2023 12:51:09 +0000 Subject: Bugfix the bigfuxes Signed-off-by: Laurent Bercot --- src/libs6dns/s6dns_hosts_ip_string.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'src/libs6dns/s6dns_hosts_ip_string.c') diff --git a/src/libs6dns/s6dns_hosts_ip_string.c b/src/libs6dns/s6dns_hosts_ip_string.c index 430f7d3..8d67cb1 100644 --- a/src/libs6dns/s6dns_hosts_ip_string.c +++ b/src/libs6dns/s6dns_hosts_ip_string.c @@ -1,7 +1,6 @@ /* ISC license. */ #include -#include #include #include @@ -14,21 +13,22 @@ extern int s6dns_hosts_ip_string_r (cdb const *c, char const *name, stralloc *sa, unsigned int flags) { s6dns_domain_t d ; - int r ; cdb_data data ; if (!c->map) return 0 ; - if (!s6dns_domain_fromstring(&d, name, strlen(name)) - || !s6dns_domain_noqualify(&d)) return -1 ; - + if (!s6dns_domain_fromstring(&d, name, strlen(name))) return -1 ; + if (!(flags & 2) && !s6dns_domain_noqualify(&d)) return -1 ; { - char tmp[3 + d.len] ; + int r ; + char tmp[4 + d.len] ; tmp[0] = flags & 2 ? 'u' : 'a' ; tmp[1] = flags & 1 ? '6' : '4' ; tmp[2] = ':' ; - memcpy(tmp + 3, d.s, d.len) ; - r = cdb_find(c, &data, tmp, 3 + d.len) ; + r = s6dns_domain_tostring(tmp + 3, d.len + 1, &d) ; + tmp[3 + r] = 0 ; + if (!r) return -1 ; + r = cdb_find(c, &data, tmp, 3 + r) ; + if (r <= 0) return r ; } - if (r <= 0) return r ; if (!data.len) return 0 ; if (data.len & (flags & 1 ? 15 : 3)) return (errno = EPROTO, -1) ; if (!stralloc_catb(sa, data.s, data.len)) return -1 ; -- cgit v1.3.1