diff options
author | Richard Walters <rwalters@digitalstirling.com> | 2020-10-09 13:28:01 -0700 |
---|---|---|
committer | Richard Walters <rwalters@digitalstirling.com> | 2020-10-09 13:29:40 -0700 |
commit | 87ae5a9f02cefc51fb24305ec79d37e4da40c4f0 (patch) | |
tree | 494a83942c9869cca27946f30a9b029e52d0573c | |
parent | f07d459a57b69cdcca340a1a41d4d6f6800da8ed (diff) |
Fix bug in IPv6 address parsing
Fix bug where IPv6 address ending in a group with only digits
followed by a double-colon would not get parsed correctly
-rw-r--r-- | src/Uri.cpp | 2 | ||||
-rw-r--r-- | src/lib.rs | 2 | ||||
-rw-r--r-- | test/src/UriTests.cpp | 1 |
3 files changed, 3 insertions, 2 deletions
diff --git a/src/Uri.cpp b/src/Uri.cpp index a556276..3d8b4fa 100644 --- a/src/Uri.cpp +++ b/src/Uri.cpp @@ -316,7 +316,7 @@ namespace { if (c == ':') { numDigits = 0; ++numGroups; - state = ValidationState::AFTER_COLON_EXPECT_GROUP_OR_IPV4; + state = ValidationState::COLON_AFTER_GROUP; } else if (c == '.') { ipv4AddressEncountered = true; break; @@ -358,7 +358,7 @@ fn validate_ipv6_address(address: &str) -> Result<(), Error> { if c == ':' { num_digits = 0; num_groups += 1; - ValidationState::AfterColonExpectGroupOrIpv4 + ValidationState::ColonAfterGroup } else if c == '.' { ipv4_address_encountered = true; break; diff --git a/test/src/UriTests.cpp b/test/src/UriTests.cpp index 2fec3a0..e012627 100644 --- a/test/src/UriTests.cpp +++ b/test/src/UriTests.cpp @@ -731,6 +731,7 @@ TEST(UriTests, IPv6Address) { {"http://[::ffff:1.2.3.4]/", "::ffff:1.2.3.4", true}, {"http://[2001:db8:85a3:8d3:1319:8a2e:370:7348]/", "2001:db8:85a3:8d3:1319:8a2e:370:7348", true}, {"http://[fFfF::1]", "fFfF::1", true}, + {"http://[1234::1]", "1234::1", true}, {"http://[fFfF:1:2:3:4:5:6:a]", "fFfF:1:2:3:4:5:6:a", true}, // invalid |