Browse Source

Merge pull request #751 from crowlKats/whatwg/url#589

Forbid | in URL hosts
Valentin Gosu 4 years ago
parent
commit
38c8e9ddf4
2 changed files with 61 additions and 18 deletions
  1. 16 18
      url/src/host.rs
  2. 45 0
      url/tests/urltestdata.json

+ 16 - 18
url/src/host.rs

@@ -90,24 +90,21 @@ impl Host<String> {
         }
 
         let is_invalid_domain_char = |c| {
-            matches!(
-                c,
-                | '\0'..='\u{001F}'
-                    | ' '
-                    | '#'
-                    | '%'
-                    | '/'
-                    | ':'
-                    | '<'
-                    | '>'
-                    | '?'
-                    | '@'
-                    | '['
-                    | '\\'
-                    | ']'
-                    | '^'
-                    | '\u{007F}'
-            )
+            matches!(c, |'\0'..='\u{001F}'| ' '
+                | '#'
+                | '%'
+                | '/'
+                | ':'
+                | '<'
+                | '>'
+                | '?'
+                | '@'
+                | '['
+                | '\\'
+                | ']'
+                | '^'
+                | '\u{007F}'
+                | '|')
         };
 
         if domain.find(is_invalid_domain_char).is_some() {
@@ -146,6 +143,7 @@ impl Host<String> {
                     | '\\'
                     | ']'
                     | '^'
+                    | '|'
             )
         };
 

+ 45 - 0
url/tests/urltestdata.json

@@ -4707,6 +4707,11 @@
     "base": "about:blank",
     "failure": true
   },
+  {
+    "input": "sc://a|b/",
+    "base": "about:blank",
+    "failure": true
+  },
   "Forbidden host codepoints: tabs and newlines are removed during preprocessing",
   {
     "input": "foo://ho\u0009st/",
@@ -4931,6 +4936,11 @@
     "base": "about:blank",
     "failure": true
   },
+  {
+    "input": "http://a|b/",
+    "base": "about:blank",
+    "failure": true
+  },
   {
     "input": "http://a\u007Fb/",
     "base": "about:blank",
@@ -5200,6 +5210,11 @@
     "base": "about:blank",
     "failure": true
   },
+  {
+    "input": "http://ho%7Cst/",
+    "base": "about:blank",
+    "failure": true
+  },
   {
     "input": "http://ho%7Fst/",
     "base": "about:blank",
@@ -5777,6 +5792,36 @@
     "base": "about:blank",
     "failure": true
   },
+  {
+    "input": "file://%43%7C",
+    "base": "about:blank",
+    "failure": true
+  },
+  {
+    "input": "file://%43|",
+    "base": "about:blank",
+    "failure": true
+  },
+  {
+    "input": "file://C%7C",
+    "base": "about:blank",
+    "failure": true
+  },
+  {
+    "input": "file://%43%7C/",
+    "base": "about:blank",
+    "failure": true
+  },
+  {
+    "input": "https://%43%7C/",
+    "base": "about:blank",
+    "failure": true
+  },
+  {
+    "input": "asdf://%43|/",
+    "base": "about:blank",
+    "failure": true
+  },
   {
     "input": "asdf://%43%7C/",
     "base": "about:blank",