Restore old behaviour on broken UNC paths
This commit is contained in:
parent
8c6ce6b91b
commit
0fe54d4650
@ -198,14 +198,7 @@ fn parse_next_component(path: &OsStr, verbatim: bool) -> (&OsStr, &OsStr) {
|
|||||||
|
|
||||||
match path.bytes().iter().position(|&x| separator(x)) {
|
match path.bytes().iter().position(|&x| separator(x)) {
|
||||||
Some(separator_start) => {
|
Some(separator_start) => {
|
||||||
let mut separator_end = separator_start + 1;
|
let separator_end = separator_start + 1;
|
||||||
|
|
||||||
// a series of multiple separator characters is treated as a single separator,
|
|
||||||
// except in verbatim paths
|
|
||||||
while !verbatim && separator_end < path.len() && separator(path.bytes()[separator_end])
|
|
||||||
{
|
|
||||||
separator_end += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
let component = &path.bytes()[..separator_start];
|
let component = &path.bytes()[..separator_start];
|
||||||
|
|
||||||
|
@ -31,16 +31,6 @@ fn test_parse_next_component() {
|
|||||||
parse_next_component(OsStr::new(r"servershare"), false),
|
parse_next_component(OsStr::new(r"servershare"), false),
|
||||||
(OsStr::new(r"servershare"), OsStr::new(""))
|
(OsStr::new(r"servershare"), OsStr::new(""))
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(
|
|
||||||
parse_next_component(OsStr::new(r"server/\//\/\\\\/////\/share"), false),
|
|
||||||
(OsStr::new(r"server"), OsStr::new(r"share"))
|
|
||||||
);
|
|
||||||
|
|
||||||
assert_eq!(
|
|
||||||
parse_next_component(OsStr::new(r"server\\\\\\\\\\\\\\share"), true),
|
|
||||||
(OsStr::new(r"server"), OsStr::new(r"\\\\\\\\\\\\\share"))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -126,3 +116,22 @@ fn test_windows_prefix_components() {
|
|||||||
assert_eq!(drive.as_os_str(), OsStr::new("C:"));
|
assert_eq!(drive.as_os_str(), OsStr::new("C:"));
|
||||||
assert_eq!(components.as_path(), Path::new(""));
|
assert_eq!(components.as_path(), Path::new(""));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// See #101358.
|
||||||
|
///
|
||||||
|
/// Note that the exact behaviour here may change in the future.
|
||||||
|
/// In which case this test will need to adjusted.
|
||||||
|
#[test]
|
||||||
|
fn broken_unc_path() {
|
||||||
|
use crate::path::Component;
|
||||||
|
|
||||||
|
let mut components = Path::new(r"\\foo\\bar\\").components();
|
||||||
|
assert_eq!(components.next(), Some(Component::RootDir));
|
||||||
|
assert_eq!(components.next(), Some(Component::Normal("foo".as_ref())));
|
||||||
|
assert_eq!(components.next(), Some(Component::Normal("bar".as_ref())));
|
||||||
|
|
||||||
|
let mut components = Path::new("//foo//bar//").components();
|
||||||
|
assert_eq!(components.next(), Some(Component::RootDir));
|
||||||
|
assert_eq!(components.next(), Some(Component::Normal("foo".as_ref())));
|
||||||
|
assert_eq!(components.next(), Some(Component::Normal("bar".as_ref())));
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user