aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Walters <rwalters@digitalstirling.com>2020-10-09 13:30:45 -0700
committerRichard Walters <rwalters@digitalstirling.com>2020-10-09 13:30:45 -0700
commit456ce952f2ba8e6cb9c63ee211b2fa7db49d9529 (patch)
tree3cae4aa6ad96283f2a1de94b9a0fc6e73a38b516
parent87ae5a9f02cefc51fb24305ec79d37e4da40c4f0 (diff)
Fix bug in parsing IPv6 addresses
Fix bug where an IPv6 address ending in a double-colon was not considered valid (it was being considered as truncated).
-rw-r--r--src/Uri.cpp1
-rw-r--r--src/lib.rs1
-rw-r--r--test/src/UriTests.cpp1
3 files changed, 1 insertions, 2 deletions
diff --git a/src/Uri.cpp b/src/Uri.cpp
index 3d8b4fa..2b15ede 100644
--- a/src/Uri.cpp
+++ b/src/Uri.cpp
@@ -370,7 +370,6 @@ namespace {
(position == address.length())
&& (
(state == ValidationState::COLON_BUT_NO_GROUPS_YET)
- || (state == ValidationState::AFTER_COLON_EXPECT_GROUP_OR_IPV4)
|| (state == ValidationState::COLON_AFTER_GROUP)
)
) { // trailing single colon
diff --git a/src/lib.rs b/src/lib.rs
index ffb6c8b..cf48082 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -409,7 +409,6 @@ fn validate_ipv6_address(address: &str) -> Result<(), Error> {
#[allow(unused_parens)]
if (
(state == ValidationState::ColonButNoGroupsYet)
- || (state == ValidationState::AfterColonExpectGroupOrIpv4)
|| (state == ValidationState::ColonAfterGroup)
) { // trailing single colon
return Err(Error::IllegalCharacter);
diff --git a/test/src/UriTests.cpp b/test/src/UriTests.cpp
index e012627..df87093 100644
--- a/test/src/UriTests.cpp
+++ b/test/src/UriTests.cpp
@@ -733,6 +733,7 @@ TEST(UriTests, IPv6Address) {
{"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},
+ {"http://[2001:db8:85a3:8a2e::]/", "2001:db8:85a3:8a2e::", true},
// invalid
{"http://[::fFfF::1]", "", false},