@@ -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