Skip to content

Commit 6f92c08

Browse files
authored
Merge pull request #655 from djc/fuzzed
Fix out of bounds slicing in Url::username()
2 parents 91409d6 + 9aac190 commit 6f92c08

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

url/src/lib.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -729,8 +729,9 @@ impl Url {
729729
/// # run().unwrap();
730730
/// ```
731731
pub fn username(&self) -> &str {
732-
if self.has_authority() {
733-
self.slice(self.scheme_end + ("://".len() as u32)..self.username_end)
732+
let scheme_separator_len = "://".len() as u32;
733+
if self.has_authority() && self.username_end > self.scheme_end + scheme_separator_len {
734+
self.slice(self.scheme_end + scheme_separator_len..self.username_end)
734735
} else {
735736
""
736737
}

url/tests/unit.rs

+6
Original file line numberDiff line numberDiff line change
@@ -665,3 +665,9 @@ fn test_set_scheme_to_file_with_host() {
665665
assert_eq!(url.to_string(), "http://localhost:6767/foo/bar");
666666
assert_eq!(result, Err(()));
667667
}
668+
669+
#[test]
670+
fn no_panic() {
671+
let mut url = Url::parse("arhttpsps:/.//eom/dae.com/\\\\t\\:").unwrap();
672+
url::quirks::set_hostname(&mut url, "//eom/datcom/\\\\t\\://eom/data.cs").unwrap();
673+
}

0 commit comments

Comments
 (0)