Skip to content

Commit c9c1432

Browse files
noxo0Ignition0o
authored andcommitted
Properly copy hosts of base file:// URLs when needed
> test result: FAILED. 642 passed; 71 failed; 0 ignored; 0 measured
1 parent 68091f7 commit c9c1432

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

src/parser.rs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -538,36 +538,44 @@ impl<'a> Parser<'a> {
538538
fragment_start: fragment_start,
539539
});
540540
} else {
541-
self.serialization.push_str("file:///");
541+
self.serialization.push_str("file://");
542542
let scheme_end = "file".len() as u32;
543-
let path_start = "file://".len();
543+
let host_start = "file://".len();
544+
let mut host_end = host_start;
545+
let mut host = HostInternal::None;
544546
if !starts_with_windows_drive_letter_segment(&input_after_first_char) {
545547
if let Some(base_url) = base_file_url {
546548
let first_segment = base_url.path_segments().unwrap().next().unwrap();
547549
if is_normalized_windows_drive_letter(first_segment) {
548-
self.serialization.push_str(first_segment);
549550
self.serialization.push('/');
551+
self.serialization.push_str(first_segment);
552+
} else if let Some(host_str) = base_url.host_str() {
553+
self.serialization.push_str(host_str);
554+
host_end = self.serialization.len();
555+
host = base_url.host.clone();
550556
}
551557
}
552558
}
559+
self.serialization.push('/');
553560
let remaining = self.parse_path(
554561
SchemeType::File,
555562
&mut false,
556-
path_start,
563+
host_end,
557564
input_after_first_char,
558565
);
559566
let (query_start, fragment_start) =
560567
self.parse_query_and_fragment(scheme_type, scheme_end, remaining)?;
561-
let path_start = path_start as u32;
568+
let host_start = host_start as u32;
569+
let host_end = host_end as u32;
562570
return Ok(Url {
563571
serialization: self.serialization,
564572
scheme_end: scheme_end,
565-
username_end: path_start,
566-
host_start: path_start,
567-
host_end: path_start,
568-
host: HostInternal::None,
573+
username_end: host_start,
574+
host_start,
575+
host_end,
576+
host,
569577
port: None,
570-
path_start: path_start,
578+
path_start: host_end,
571579
query_start: query_start,
572580
fragment_start: fragment_start,
573581
});

0 commit comments

Comments
 (0)