Merge pull request #3357 from cesanta/atonscope

fix mg_aton not setting is_ip6 with scope_ids
This commit is contained in:
Sergio R. Caprile authored and GitHub committed 2025-12-04 12:22:06 -03:00
commit 4717a15c17
3 files changed
+20 -10

No files matched your search

+8 -3
View File
@@ -4162,7 +4162,7 @@ static bool mg_aton6(struct mg_str str, struct mg_addr *addr) {
size_t i, j = 0, n = 0, dc = 42;
addr->scope_id = 0;
if (str.len > 2 && str.buf[0] == '[') str.buf++, str.len -= 2;
if (mg_v4mapped(str, addr)) return true;
if (mg_v4mapped(str, addr)) return true; // sets addr->is_ip6
for (i = 0; i < str.len; i++) {
if ((str.buf[i] >= '0' && str.buf[i] <= '9') ||
(str.buf[i] >= 'a' && str.buf[i] <= 'f') ||
@@ -4184,8 +4184,13 @@ static bool mg_aton6(struct mg_str str, struct mg_addr *addr) {
if (n > 14) return false;
addr->ip[n] = addr->ip[n + 1] = 0; // For trailing ::
} else if (str.buf[i] == '%') { // Scope ID, last in string
return mg_str_to_num(mg_str_n(&str.buf[i + 1], str.len - i - 1), 10,
&addr->scope_id, sizeof(uint8_t));
if (mg_str_to_num(mg_str_n(&str.buf[i + 1], str.len - i - 1), 10,
&addr->scope_id, sizeof(uint8_t))) {
addr->is_ip6 = true;
return true;
} else {
return false;
}
} else {
return false;
}
+8 -3
View File
@@ -86,7 +86,7 @@ static bool mg_aton6(struct mg_str str, struct mg_addr *addr) {
size_t i, j = 0, n = 0, dc = 42;
addr->scope_id = 0;
if (str.len > 2 && str.buf[0] == '[') str.buf++, str.len -= 2;
if (mg_v4mapped(str, addr)) return true;
if (mg_v4mapped(str, addr)) return true; // sets addr->is_ip6
for (i = 0; i < str.len; i++) {
if ((str.buf[i] >= '0' && str.buf[i] <= '9') ||
(str.buf[i] >= 'a' && str.buf[i] <= 'f') ||
@@ -108,8 +108,13 @@ static bool mg_aton6(struct mg_str str, struct mg_addr *addr) {
if (n > 14) return false;
addr->ip[n] = addr->ip[n + 1] = 0; // For trailing ::
} else if (str.buf[i] == '%') { // Scope ID, last in string
return mg_str_to_num(mg_str_n(&str.buf[i + 1], str.len - i - 1), 10,
&addr->scope_id, sizeof(uint8_t));
if (mg_str_to_num(mg_str_n(&str.buf[i + 1], str.len - i - 1), 10,
&addr->scope_id, sizeof(uint8_t))) {
addr->is_ip6 = true;
return true;
} else {
return false;
}
} else {
return false;
}
+4 -4
View File
@@ -2717,22 +2717,22 @@ static void test_util(void) {
ASSERT(mg_url_decode("a=%123", 6, buf, sizeof(buf), 0) == 4 &&
buf[2] == 0x12 && buf[3] == '3');
memset(a.ip, 0xaa, sizeof(a.ip));
memset(&a, 0, sizeof(a));
ASSERT(mg_aton(mg_str("::1%1"), &a) == true);
ASSERT(a.is_ip6 == true);
ASSERT(a.scope_id == 1);
memset(a.ip, 0xaa, sizeof(a.ip));
memset(&a, 0, sizeof(a));
ASSERT(mg_aton(mg_str("abcd::aabb:ccdd%17"), &a) == true);
ASSERT(a.is_ip6 == true);
ASSERT(a.scope_id == 17);
memset(a.ip, 0xaa, sizeof(a.ip));
memset(&a, 0xaa, sizeof(a)), a.is_ip6 = false;
ASSERT(mg_aton(mg_str("::1%17"), &a) == true);
ASSERT(a.is_ip6 == true);
ASSERT(a.scope_id == 17);
memset(a.ip, 0xaa, sizeof(a.ip));
memset(&a, 0xaa, sizeof(a)), a.is_ip6 = false;
ASSERT(mg_aton(mg_str("::1%255"), &a) == true);
ASSERT(a.is_ip6 == true);
ASSERT(a.scope_id == 255);