From 1b4c14edbaf0dfaa1719f7c066e1a841900e2ea1 Mon Sep 17 00:00:00 2001 From: Robert Xiao Date: Sun, 24 Aug 2025 23:55:19 -0700 Subject: [PATCH] Allow longer nameservers. IPv6 nameservers can be significantly longer than 16 characters in length. For example, `2001:0db8:85a3:0000:0000:8a2e:0370:7334` is 39 characters long, and certain syntax elements (e.g. zone indices) can make them even longer. This patch allows up to 256 characters for the nameserver, which is large enough to contain the maximum length of any hostname (~253 ASCII characters), and definitely enough for any IPv4 or IPv6 address. --- src/util.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/util.c b/src/util.c index e34858c..b9d7f6b 100644 --- a/src/util.c +++ b/src/util.c @@ -21,10 +21,10 @@ char *get_resolvconf_addr(void) { - static char addr[16]; + static char addr[257]; char *rv = NULL; #ifndef WINDOWS32 - char buf[80]; + char buf[257]; FILE *fp; #ifdef ANDROID fp = popen("getprop net.dns1", "r"); @@ -32,7 +32,7 @@ char *get_resolvconf_addr(void) err(1, "getprop net.dns1 failed"); if (fgets(buf, sizeof(buf), fp) == NULL) err(1, "read getprop net.dns1 failed"); - if (sscanf(buf, "%15s", addr) == 1) + if (sscanf(buf, "%256s", addr) == 1) rv = addr; pclose(fp); #else @@ -42,7 +42,7 @@ char *get_resolvconf_addr(void) while (feof(fp) == 0) { fgets(buf, sizeof(buf), fp); - if (sscanf(buf, "nameserver %15s", addr) == 1) { + if (sscanf(buf, "nameserver %256s", addr) == 1) { rv = addr; break; }