|
@@ -998,12 +998,18 @@ impl Url {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if let Some(host) = host {
|
|
if let Some(host) = host {
|
|
|
|
|
+ if host == "" && SchemeType::from(self.scheme()).is_special() {
|
|
|
|
|
+ return Err(ParseError::EmptyHost);
|
|
|
|
|
+ }
|
|
|
self.set_host_internal(try!(Host::parse(host)), None)
|
|
self.set_host_internal(try!(Host::parse(host)), None)
|
|
|
} else if self.has_host() {
|
|
} else if self.has_host() {
|
|
|
|
|
+ if SchemeType::from(self.scheme()).is_special() {
|
|
|
|
|
+ return Err(ParseError::EmptyHost)
|
|
|
|
|
+ }
|
|
|
debug_assert!(self.byte_at(self.scheme_end) == b':');
|
|
debug_assert!(self.byte_at(self.scheme_end) == b':');
|
|
|
debug_assert!(self.byte_at(self.path_start) == b'/');
|
|
debug_assert!(self.byte_at(self.path_start) == b'/');
|
|
|
let new_path_start = self.scheme_end + 1;
|
|
let new_path_start = self.scheme_end + 1;
|
|
|
- self.serialization.drain(self.path_start as usize..new_path_start as usize);
|
|
|
|
|
|
|
+ self.serialization.drain(new_path_start as usize..self.path_start as usize);
|
|
|
let offset = self.path_start - new_path_start;
|
|
let offset = self.path_start - new_path_start;
|
|
|
self.path_start = new_path_start;
|
|
self.path_start = new_path_start;
|
|
|
self.username_end = new_path_start;
|
|
self.username_end = new_path_start;
|