Переглянути джерело

set_hostname should error when encountering colon ':' (#1060)

edgul 1 рік тому
батько
коміт
cf305db0cc
3 змінених файлів з 5 додано та 4 видалено
  1. 1 1
      url/src/parser.rs
  2. 4 1
      url/src/quirks.rs
  3. 0 2
      url/tests/expected_failures.txt

+ 1 - 1
url/src/parser.rs

@@ -246,7 +246,7 @@ impl<'i> Input<'i> {
     }
 
     #[inline]
-    fn starts_with<P: Pattern>(&self, p: P) -> bool {
+    pub fn starts_with<P: Pattern>(&self, p: P) -> bool {
         p.split_prefix(&mut self.clone())
     }
 

+ 4 - 1
url/src/quirks.rs

@@ -212,7 +212,10 @@ pub fn set_hostname(url: &mut Url, new_hostname: &str) -> Result<(), ()> {
         return Ok(());
     }
 
-    if let Ok((host, _remaining)) = Parser::parse_host(input, scheme_type) {
+    if let Ok((host, remaining)) = Parser::parse_host(input, scheme_type) {
+        if remaining.starts_with(':') {
+            return Err(());
+        };
         if let Host::Domain(h) = &host {
             if h.is_empty() {
                 // Empty host on special not file url

+ 0 - 2
url/tests/expected_failures.txt

@@ -34,8 +34,6 @@
 <file:///.//> against <file:////>
 <file:.//p>
 <file:/.//p>
-<http://example.net/path> set hostname to <example.com:8080>
-<http://example.net:8080/path> set hostname to <example.com:>
 <non-spec:/.//p> set hostname to <h>
 <non-spec:/.//p> set hostname to <>
 <foo:///some/path> set pathname to <>