@@ -520,36 +520,44 @@ impl<'a> Parser<'a> {
520
520
fragment_start : fragment_start,
521
521
} ) ;
522
522
} else {
523
- self . serialization . push_str ( "file:/// " ) ;
523
+ self . serialization . push_str ( "file://" ) ;
524
524
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 ;
526
528
if !starts_with_windows_drive_letter_segment ( & input_after_first_char) {
527
529
if let Some ( base_url) = base_file_url {
528
530
let first_segment = base_url. path_segments ( ) . unwrap ( ) . next ( ) . unwrap ( ) ;
529
531
if is_normalized_windows_drive_letter ( first_segment) {
530
- self . serialization . push_str ( first_segment) ;
531
532
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 ( ) ;
532
538
}
533
539
}
534
540
}
541
+ self . serialization . push ( '/' ) ;
535
542
let remaining = self . parse_path (
536
543
SchemeType :: File ,
537
544
& mut false ,
538
- path_start ,
545
+ host_end ,
539
546
input_after_first_char,
540
547
) ;
541
548
let ( query_start, fragment_start) =
542
549
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 ;
544
552
return Ok ( Url {
545
553
serialization : self . serialization ,
546
554
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,
551
559
port : None ,
552
- path_start : path_start ,
560
+ path_start : host_end ,
553
561
query_start : query_start,
554
562
fragment_start : fragment_start,
555
563
} ) ;
0 commit comments