Преглед на файлове

Have Url::from_file_path not generate an URL with an empty path. Fix #197.

Simon Sapin преди 10 години
родител
ревизия
ce6ca74892
променени са 3 файла, в които са добавени 17 реда и са изтрити 2 реда
  1. 1 1
      Cargo.toml
  2. 7 1
      src/lib.rs
  3. 9 0
      tests/unit.rs

+ 1 - 1
Cargo.toml

@@ -1,7 +1,7 @@
 [package]
 
 name = "url"
-version = "1.1.0"
+version = "1.1.1"
 authors = ["The rust-url developers"]
 
 description = "URL library for Rust, based on the WHATWG URL Standard"

+ 7 - 1
src/lib.rs

@@ -1243,11 +1243,17 @@ fn path_to_file_url_segments(path: &Path, serialization: &mut String) -> Result<
     if !path.is_absolute() {
         return Err(())
     }
+    let mut empty = true;
     // skip the root component
     for component in path.components().skip(1) {
+        empty = false;
         serialization.push('/');
         serialization.extend(percent_encode(
-            component.as_os_str().as_bytes(), PATH_SEGMENT_ENCODE_SET))
+            component.as_os_str().as_bytes(), PATH_SEGMENT_ENCODE_SET));
+    }
+    if empty {
+        // An URL’s path must not be empty.
+        serialization.push('/');
     }
     Ok(())
 }

+ 9 - 0
tests/unit.rs

@@ -259,3 +259,12 @@ fn issue_61() {
     assert_eq!(url.port_or_known_default(), Some(443));
     url.assert_invariants();
 }
+
+#[test]
+/// https://github.com/servo/rust-url/issues/197
+fn issue_197() {
+    let mut url = Url::from_file_path("/").unwrap();
+    url.assert_invariants();
+    assert_eq!(url, Url::parse("file:///").unwrap());
+    url.path_segments_mut().unwrap().pop_if_empty();
+}