@@ -520,36 +520,44 @@ impl<'a> Parser<'a> {
520520 fragment_start : fragment_start,
521521 } ) ;
522522 } else {
523- self . serialization . push_str ( "file:/// " ) ;
523+ self . serialization . push_str ( "file://" ) ;
524524 let scheme_end = "file" . len ( ) as u32 ;
525- let path_start = "file://" . len ( ) ;
525+ let host_start = "file://" . len ( ) ;
526+ let mut host_end = host_start;
527+ let mut host = HostInternal :: None ;
526528 if !starts_with_windows_drive_letter_segment ( & input_after_first_char) {
527529 if let Some ( base_url) = base_file_url {
528530 let first_segment = base_url. path_segments ( ) . unwrap ( ) . next ( ) . unwrap ( ) ;
529531 if is_normalized_windows_drive_letter ( first_segment) {
530- self . serialization . push_str ( first_segment) ;
531532 self . serialization . push ( '/' ) ;
533+ self . serialization . push_str ( first_segment) ;
534+ } else if let Some ( host_str) = base_url. host_str ( ) {
535+ self . serialization . push_str ( host_str) ;
536+ host_end = self . serialization . len ( ) ;
537+ host = base_url. host . clone ( ) ;
532538 }
533539 }
534540 }
541+ self . serialization . push ( '/' ) ;
535542 let remaining = self . parse_path (
536543 SchemeType :: File ,
537544 & mut false ,
538- path_start ,
545+ host_end ,
539546 input_after_first_char,
540547 ) ;
541548 let ( query_start, fragment_start) =
542549 self . parse_query_and_fragment ( scheme_type, scheme_end, remaining) ?;
543- let path_start = path_start as u32 ;
550+ let host_start = host_start as u32 ;
551+ let host_end = host_end as u32 ;
544552 return Ok ( Url {
545553 serialization : self . serialization ,
546554 scheme_end : scheme_end,
547- username_end : path_start ,
548- host_start : path_start ,
549- host_end : path_start ,
550- host : HostInternal :: None ,
555+ username_end : host_start ,
556+ host_start,
557+ host_end,
558+ host,
551559 port : None ,
552- path_start : path_start ,
560+ path_start : host_end ,
553561 query_start : query_start,
554562 fragment_start : fragment_start,
555563 } ) ;
0 commit comments