@@ -538,36 +538,44 @@ impl<'a> Parser<'a> {
538
538
fragment_start : fragment_start,
539
539
} ) ;
540
540
} else {
541
- self . serialization . push_str ( "file:/// " ) ;
541
+ self . serialization . push_str ( "file://" ) ;
542
542
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 ;
544
546
if !starts_with_windows_drive_letter_segment ( & input_after_first_char) {
545
547
if let Some ( base_url) = base_file_url {
546
548
let first_segment = base_url. path_segments ( ) . unwrap ( ) . next ( ) . unwrap ( ) ;
547
549
if is_normalized_windows_drive_letter ( first_segment) {
548
- self . serialization . push_str ( first_segment) ;
549
550
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 ( ) ;
550
556
}
551
557
}
552
558
}
559
+ self . serialization . push ( '/' ) ;
553
560
let remaining = self . parse_path (
554
561
SchemeType :: File ,
555
562
& mut false ,
556
- path_start ,
563
+ host_end ,
557
564
input_after_first_char,
558
565
) ;
559
566
let ( query_start, fragment_start) =
560
567
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 ;
562
570
return Ok ( Url {
563
571
serialization : self . serialization ,
564
572
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,
569
577
port : None ,
570
- path_start : path_start ,
578
+ path_start : host_end ,
571
579
query_start : query_start,
572
580
fragment_start : fragment_start,
573
581
} ) ;
0 commit comments