]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
yparser: every IPv6 address contains at least 2 colons
authorDaniel Salzman <daniel.salzman@nic.cz>
Thu, 15 Jan 2026 08:28:18 +0000 (09:28 +0100)
committerDaniel Salzman <daniel.salzman@nic.cz>
Thu, 15 Jan 2026 09:02:07 +0000 (10:02 +0100)
This fixes issues with UNIX socket paths containing a colon.

src/libknot/yparser/yptrafo.c

index 30321164f3759858870a21f2be00d67a411fb327..ff02cd7551c3a1616177d2a181292299c170b165 100644 (file)
@@ -384,25 +384,25 @@ static uint8_t sock_type_guess(
        const uint8_t **if_name)
 {
        size_t dots = 0;
-       size_t semicolons = 0;
+       size_t colons = 0;
        size_t digits = 0;
 
        // Analyze the string.
        for (size_t i = 0; i < len; i++) {
                if (str[i] == '.') dots++;
-               else if (str[i] == ':') semicolons++;
+               else if (str[i] == ':') colons++;
                else if (is_digit(str[i])) digits++;
        }
 
        // Guess socket type.
-       if (semicolons >= 1) {
+       if (colons >= 2) {
                *if_name = (const uint8_t *)strchr((const char *)str, '%');
                if (*if_name == NULL) {
                        return ADDR_TYPE_IPV6;
                } else {
                        return ADDR_TYPE_IPV6_LINKLOCAL;
                }
-       } else if (semicolons == 0 && dots == 3 && digits >= 3) {
+       } else if (colons == 0 && dots == 3 && digits >= 3) {
                return ADDR_TYPE_IPV4;
        } else {
                return ADDR_TYPE_UNIX;