Commit 29dda184 authored by Ondrej Zajicek (work)'s avatar Ondrej Zajicek (work)
Browse files

Conf: Fix parsing full-length IPv6 addresses

Lexer expression for bytestring was too loose, accepting also
full-length IPv6 addresses. It should be restricted such that
colon is used between every byte or never.

Fix the regex and also add some test cases for it.

Thanks to Alexander Zubkov for the bugreport
parent 75aceada
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -255,7 +255,7 @@ WHITE [ \t]
  return IP4;
}

{XIGIT}{2}(:{XIGIT}{2}|{XIGIT}{2}){15,} {
{XIGIT}{2}((:{XIGIT}{2}){15,}|({XIGIT}{2}){15,}) {
  char *s = yytext;
  size_t len = 0, i;
  struct bytestring *bytes;
+20 −0
Original line number Diff line number Diff line
@@ -335,6 +335,26 @@ ip p;
	p = 1234:5678::;
	bt_assert(!p.is_v4);
	bt_assert(p.mask(24) = 1234:5600::);

	p = 1:2:3:4:5:6:7:8;
	bt_assert(!p.is_v4);
	bt_assert(format(p) = "1:2:3:4:5:6:7:8");
	bt_assert(p.mask(64) = 1:2:3:4::);

	p = 10:20:30:40:50:60:70:80;
	bt_assert(!p.is_v4);
	bt_assert(format(p) = "10:20:30:40:50:60:70:80");
	bt_assert(p.mask(64) = 10:20:30:40::);

	p = 1090:20a0:30b0:40c0:50d0:60e0:70f0:8000;
	bt_assert(!p.is_v4);
	bt_assert(format(p) = "1090:20a0:30b0:40c0:50d0:60e0:70f0:8000");
	bt_assert(p.mask(64) = 1090:20a0:30b0:40c0::);

	p = ::fffe:6:c0c:936d:88c7:35d3;
	bt_assert(!p.is_v4);
	bt_assert(format(p) = "::fffe:6:c0c:936d:88c7:35d3");
	bt_assert(p.mask(64) = 0:0:fffe:6::);
}

bt_test_suite(t_ip, "Testing ip address");