|
| 1 | +#![no_main] |
| 2 | +use urlpattern::{UrlPattern, UrlPatternInit, UrlPatternOptions}; |
| 3 | +use libfuzzer_sys::arbitrary::Arbitrary; |
| 4 | +use libfuzzer_sys::fuzz_target; |
| 5 | + |
| 6 | +#[derive(Arbitrary, Debug)] |
| 7 | +struct FuzzInput { |
| 8 | + protocol: Option<String>, |
| 9 | + username: Option<String>, |
| 10 | + password: Option<String>, |
| 11 | + hostname: Option<String>, |
| 12 | + port: Option<String>, |
| 13 | + pathname: Option<String>, |
| 14 | + search: Option<String>, |
| 15 | + hash: Option<String>, |
| 16 | + base_url: Option<String>, |
| 17 | + ignore_case: bool, |
| 18 | +} |
| 19 | + |
| 20 | +fuzz_target!(|input: FuzzInput| { |
| 21 | + let init = UrlPatternInit { |
| 22 | + protocol: input.protocol, |
| 23 | + username: input.username, |
| 24 | + password: input.password, |
| 25 | + hostname: input.hostname, |
| 26 | + port: input.port, |
| 27 | + pathname: input.pathname, |
| 28 | + search: input.search, |
| 29 | + hash: input.hash, |
| 30 | + base_url: input.base_url.and_then(|s| s.parse().ok()), |
| 31 | + }; |
| 32 | + let options = UrlPatternOptions { |
| 33 | + ignore_case: input.ignore_case, |
| 34 | + }; |
| 35 | + let _ = UrlPattern::<regex::Regex>::parse(init, options); |
| 36 | +}); |
0 commit comments