Skip to content

Commit c02d1d1

Browse files
committed
Add url fuzz target
1 parent 75e935f commit c02d1d1

2 files changed

Lines changed: 64 additions & 0 deletions

File tree

fuzz/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,9 @@ name = "uri_deserialize_pjuri"
2929
path = "fuzz_targets/uri/deserialize_pjuri.rs"
3030
doc = false
3131
bench = false
32+
33+
[[bin]]
34+
name = "url_decode_url"
35+
path = "fuzz_targets/url/decode_url.rs"
36+
doc = false
37+
bench = false
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#![no_main]
2+
3+
use std::str;
4+
5+
use libfuzzer_sys::fuzz_target;
6+
// Adjust this path to wherever your Url module lives in your crate.
7+
use payjoin::Url;
8+
9+
fn do_test(data: &[u8]) {
10+
let Ok(s) = str::from_utf8(data) else { return };
11+
12+
let Ok(mut url) = Url::parse(s) else { return };
13+
14+
let _ = url.scheme();
15+
let _ = url.has_host();
16+
let _ = url.domain();
17+
let _ = url.host_str();
18+
let _ = url.port();
19+
let _ = url.path();
20+
let _ = url.query();
21+
let _ = url.fragment();
22+
let _ = url.as_str();
23+
let _ = url.to_string();
24+
if let Some(segs) = url.path_segments() {
25+
let _ = segs.collect::<Vec<_>>();
26+
}
27+
28+
let raw = url.as_str().to_owned();
29+
if let Ok(reparsed) = Url::parse(&raw) {
30+
assert_eq!(
31+
reparsed.as_str(),
32+
raw,
33+
"round-trip mismatch: first={raw:?} second={:?}",
34+
reparsed.as_str()
35+
);
36+
}
37+
38+
url.set_port(Some(8080));
39+
url.set_port(None);
40+
url.set_fragment(Some("fuzz"));
41+
url.set_fragment(None);
42+
url.set_query(Some("k=v"));
43+
url.set_query(None);
44+
url.query_pairs_mut().append_pair("fuzz_key", "fuzz_val");
45+
46+
if let Some(mut segs) = url.path_segments_mut() {
47+
segs.push("fuzz_segment");
48+
}
49+
50+
let _ = url.join("relative/path");
51+
let _ = url.join("/absolute/path");
52+
let _ = url.join("../dotdot");
53+
let _ = url.join("https://other.example.com/new");
54+
}
55+
56+
fuzz_target!(|data| {
57+
do_test(data);
58+
});

0 commit comments

Comments
 (0)