From 890d43470e0ab47bb941a17157b53da6532fe03a Mon Sep 17 00:00:00 2001 From: Hans Larsen Date: Wed, 25 Sep 2024 23:04:37 -0700 Subject: [PATCH 1/3] Add a test for issue 974 --- url/tests/unit.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/url/tests/unit.rs b/url/tests/unit.rs index afe842beb..17056228f 100644 --- a/url/tests/unit.rs +++ b/url/tests/unit.rs @@ -1316,3 +1316,10 @@ fn issue_864() { url.set_path("x"); dbg!(&url); } + +#[test] +fn issue_port_974() { + let mut url = url::Url::parse("http://example.com:8000").unwrap(); + url::quirks::set_port(&mut url, "\u{0000}9000").unwrap(); + assert_eq!(url.port(), Some(8000)); +} From cf82e38a2c2c6bd1d175eb826521d31f207d0cf8 Mon Sep 17 00:00:00 2001 From: Hans Larsen Date: Wed, 25 Sep 2024 23:10:44 -0700 Subject: [PATCH 2/3] Fix the issue --- url/src/parser.rs | 5 +++++ url/tests/expected_failures.txt | 1 - url/tests/unit.rs | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/url/src/parser.rs b/url/src/parser.rs index 8dd054df8..181a02e86 100644 --- a/url/src/parser.rs +++ b/url/src/parser.rs @@ -1120,6 +1120,11 @@ impl<'a> Parser<'a> { } input = remaining; } + + if !has_any_digit && context == Context::Setter && !input.is_empty() { + return Err(ParseError::InvalidPort); + } + let mut opt_port = Some(port as u16); if !has_any_digit || opt_port == default_port() { opt_port = None; diff --git a/url/tests/expected_failures.txt b/url/tests/expected_failures.txt index 91145db79..899e7f70f 100644 --- a/url/tests/expected_failures.txt +++ b/url/tests/expected_failures.txt @@ -39,7 +39,6 @@ set hostname to set hostname to <> set pathname to <> - set port to set href to set pathname to <\\\\> set pathname to diff --git a/url/tests/unit.rs b/url/tests/unit.rs index 17056228f..0b60af78c 100644 --- a/url/tests/unit.rs +++ b/url/tests/unit.rs @@ -1320,6 +1320,6 @@ fn issue_864() { #[test] fn issue_port_974() { let mut url = url::Url::parse("http://example.com:8000").unwrap(); - url::quirks::set_port(&mut url, "\u{0000}9000").unwrap(); + let _ = url::quirks::set_port(&mut url, "\u{0000}9000"); assert_eq!(url.port(), Some(8000)); } From 2aae10fb55a75c1722ac0d7db1eff97f6f08c981 Mon Sep 17 00:00:00 2001 From: Hans Larsen Date: Wed, 25 Sep 2024 23:12:44 -0700 Subject: [PATCH 3/3] rename test --- url/tests/unit.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/url/tests/unit.rs b/url/tests/unit.rs index 0b60af78c..fd9a3ce70 100644 --- a/url/tests/unit.rs +++ b/url/tests/unit.rs @@ -1318,7 +1318,7 @@ fn issue_864() { } #[test] -fn issue_port_974() { +fn issue_974() { let mut url = url::Url::parse("http://example.com:8000").unwrap(); let _ = url::quirks::set_port(&mut url, "\u{0000}9000"); assert_eq!(url.port(), Some(8000));