This commit is contained in:
Sergey Fionov 2024-05-14 13:57:15 +02:00 committed by GitHub
commit 4e4939c53a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 11 deletions

View File

@ -270,7 +270,8 @@ ip6addr_ntoa_r(const ip6_addr_t *addr, char *buf, int buflen)
/* Check for empty block. */ /* Check for empty block. */
if (current_block_value == 0) { if (current_block_value == 0) {
if (current_block_index == 7 && empty_block_flag == 1) { if (current_block_index == 7) {
if (empty_block_flag == 1) {
/* special case, we must render a ':' for the last block. */ /* special case, we must render a ':' for the last block. */
buf[i++] = ':'; buf[i++] = ':';
if (i >= buflen) { if (i >= buflen) {
@ -278,7 +279,7 @@ ip6addr_ntoa_r(const ip6_addr_t *addr, char *buf, int buflen)
} }
break; break;
} }
if (empty_block_flag == 0) { } else if (empty_block_flag == 0) {
/* generate empty block "::", but only if more than one contiguous zero block, /* generate empty block "::", but only if more than one contiguous zero block,
* according to current formatting suggestions RFC 5952. */ * according to current formatting suggestions RFC 5952. */
next_block_value = lwip_htonl(addr->addr[(current_block_index + 1) >> 1]); next_block_value = lwip_htonl(addr->addr[(current_block_index + 1) >> 1]);

View File

@ -268,15 +268,18 @@ END_TEST
struct test_addr_and_str { struct test_addr_and_str {
ip_addr_t addr; ip_addr_t addr;
u32_t bytes_after;
const char *str; const char *str;
}; };
START_TEST(test_ip6_ntoa) START_TEST(test_ip6_ntoa)
{ {
struct test_addr_and_str tests[] = { struct test_addr_and_str tests[] = {
{IPADDR6_INIT_HOST(0xfe800000, 0x00000000, 0xb2a1a2ff, 0xfea3a4a5), "FE80::B2A1:A2FF:FEA3:A4A5"}, /* test shortened zeros */ {IPADDR6_INIT_HOST(0xfe800000, 0x00000000, 0xb2a1a2ff, 0xfea3a4a5), 0, "FE80::B2A1:A2FF:FEA3:A4A5"}, /* test shortened zeros */
{IPADDR6_INIT_HOST(0xfe800000, 0xff000000, 0xb2a1a2ff, 0xfea3a4a5), "FE80:0:FF00:0:B2A1:A2FF:FEA3:A4A5"}, /* don't omit single zero blocks */ {IPADDR6_INIT_HOST(0xfe800000, 0xff000000, 0xb2a1a2ff, 0xfea3a4a5), 0, "FE80:0:FF00:0:B2A1:A2FF:FEA3:A4A5"}, /* don't omit single zero blocks */
{IPADDR6_INIT_HOST(0xfe800000, 0xff000000, 0xb2000000, 0x0000a4a5), "FE80:0:FF00:0:B200::A4A5"}, /* omit longest zero block */ {IPADDR6_INIT_HOST(0xfe800000, 0xff000000, 0xb2000000, 0x0000a4a5), 0, "FE80:0:FF00:0:B200::A4A5"}, /* omit longest zero block */
{IPADDR6_INIT_HOST(0x20010db8, 0x00010002, 0x00030004, 0x00050000), 0, "2001:DB8:1:2:3:4:5:0"}, /* do not omit last zero due to out-of-bounds bug */
{IPADDR6_INIT_HOST(0x20010db8, 0x00010002, 0x00030004, 0x00050000), ~0, "2001:DB8:1:2:3:4:5:0"}, /* do not omit last zero due to out-of-bounds bug */
}; };
char buf[128]; char buf[128];
char *str; char *str;