fix panic in Path::strip_prefix

This commit is contained in:
name1e5s 2022-03-19 22:05:56 +08:00
parent 8fbd92d0b9
commit b87dd755ca
2 changed files with 13 additions and 1 deletions

View File

@ -725,7 +725,7 @@ fn include_cur_dir(&self) -> bool {
if self.has_root() { if self.has_root() {
return false; return false;
} }
let mut iter = self.path[self.prefix_len()..].iter(); let mut iter = self.path[self.prefix_remaining()..].iter();
match (iter.next(), iter.next()) { match (iter.next(), iter.next()) {
(Some(&b'.'), None) => true, (Some(&b'.'), None) => true,
(Some(&b'.'), Some(&b)) => self.is_sep_byte(b), (Some(&b'.'), Some(&b)) => self.is_sep_byte(b),

View File

@ -114,3 +114,15 @@ fn test_parse_prefix_verbatim_device() {
assert_eq!(prefix, parse_prefix(r"/\?\C:\windows\system32\notepad.exe")); assert_eq!(prefix, parse_prefix(r"/\?\C:\windows\system32\notepad.exe"));
assert_eq!(prefix, parse_prefix(r"\\?/C:\windows\system32\notepad.exe")); assert_eq!(prefix, parse_prefix(r"\\?/C:\windows\system32\notepad.exe"));
} }
// See #93586 for more infomation.
#[test]
fn test_windows_prefix_components() {
use crate::path::Path;
let path = Path::new("C:");
let mut components = path.components();
let drive = components.next().expect("drive is expected here");
assert_eq!(drive.as_os_str(), OsStr::new("C:"));
assert_eq!(components.as_path(), Path::new(""));
}