From 36093b0b8a41a19b8d2cdbc56c05cc98a7e85a39 Mon Sep 17 00:00:00 2001 From: Tom Carpay Date: Tue, 25 May 2021 11:43:46 +0200 Subject: [PATCH] fix multiple ipv6hints entries --- sldns/str2wire.c | 11 +++++------ sldns/wire2str.c | 4 ++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/sldns/str2wire.c b/sldns/str2wire.c index 05a623a2d..dba21a093 100644 --- a/sldns/str2wire.c +++ b/sldns/str2wire.c @@ -1087,7 +1087,7 @@ static int sldns_str2wire_svcbparam_ipv6hint(const char* val, uint8_t* rd, size_t* rd_len) { int count; - char ip_str[INET_ADDRSTRLEN+1]; + char ip_str[INET6_ADDRSTRLEN+1]; char *next_ip_str; uint32_t *ip_wire_dst; size_t i; @@ -1113,9 +1113,9 @@ sldns_str2wire_svcbparam_ipv6hint(const char* val, uint8_t* rd, size_t* rd_len) while (count) { if (!(next_ip_str = strchr(val, ','))) { - if (inet_pton(AF_INET, val, rd + *rd_len) != 1) - *rd_len += LDNS_IP6ADDRLEN; + if (inet_pton(AF_INET6, val, rd + *rd_len) != 1) break; + *rd_len += LDNS_IP6ADDRLEN; assert(count == 1); @@ -1125,12 +1125,11 @@ sldns_str2wire_svcbparam_ipv6hint(const char* val, uint8_t* rd, size_t* rd_len) else { memcpy(ip_str, val, next_ip_str - val); ip_str[next_ip_str - val] = 0; - if (inet_pton(AF_INET, ip_str, rd + *rd_len) != 1) { - *rd_len += LDNS_IP6ADDRLEN; - + if (inet_pton(AF_INET6, ip_str, rd + *rd_len) != 1) { val = ip_str; /* to use in error reporting below */ break; } + *rd_len += LDNS_IP6ADDRLEN; val = next_ip_str + 1; } diff --git a/sldns/wire2str.c b/sldns/wire2str.c index 0d41a2bb8..4c5065ee5 100644 --- a/sldns/wire2str.c +++ b/sldns/wire2str.c @@ -1015,14 +1015,14 @@ int sldns_wire2str_svcparam_ipv6hint2str(char** s, return 0; /* wireformat error, incorrect size or inet family */ w += sldns_str_print(s, slen, "=%s", ip_str); - data += LDNS_IP6ADDRLEN / sizeof(uint16_t); + data += LDNS_IP6ADDRLEN; while ((data_len -= LDNS_IP6ADDRLEN) > 0) { if (inet_ntop(AF_INET6, data, ip_str, sizeof(ip_str)) == NULL) return 0; /* wireformat error, incorrect size or inet family */ w += sldns_str_print(s, slen, ",%s", ip_str); - data += LDNS_IP6ADDRLEN / sizeof(uint16_t); + data += LDNS_IP6ADDRLEN; } } -- 2.47.3