Просмотр исходного кода

Add a test for and fix issue #974 (#975)

* Add a test for issue 974

* Fix the issue

* rename test
Hans Larsen 2 лет назад
Родитель
Сommit
7eccac9a0b
3 измененных файлов с 12 добавлено и 1 удалено
  1. 5 0
      url/src/parser.rs
  2. 0 1
      url/tests/expected_failures.txt
  3. 7 0
      url/tests/unit.rs

+ 5 - 0
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;

+ 0 - 1
url/tests/expected_failures.txt

@@ -39,7 +39,6 @@
 <non-spec:/.//p> set hostname to <h>
 <non-spec:/.//p> set hostname to <>
 <foo:///some/path> set pathname to <>
-<http://example.net:8080/path> set port to <randomstring>
 <file:///var/log/system.log> set href to <http://0300.168.0xF0>
 <file://monkey/> set pathname to <\\\\>
 <file:///unicorn> set pathname to <//\\/>

+ 7 - 0
url/tests/unit.rs

@@ -1316,3 +1316,10 @@ fn issue_864() {
     url.set_path("x");
     dbg!(&url);
 }
+
+#[test]
+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));
+}