Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fuzzing #84

Merged
merged 7 commits into from Apr 6, 2020

fixes hostname filter length and schema checks

  • Loading branch information
AndriusA committed Mar 30, 2020
commit 711db2ead73921490a1682e59d0f445e9a4d0088
@@ -475,42 +475,42 @@ impl NetworkFilter {
}

// Remove trailing '*'
if filter_index_end - filter_index_start > 0
if filter_index_end > filter_index_start
&& line[..filter_index_end].ends_with('*')
{
filter_index_end -= 1;
}

// Remove leading '*' if the filter is not hostname anchored.
if filter_index_end - filter_index_start > 0 && line[filter_index_start..].starts_with('*')
if filter_index_end > filter_index_start && line[filter_index_start..].starts_with('*')
{
mask.set(NetworkFilterMask::IS_LEFT_ANCHOR, false);
filter_index_start += 1;
}

// Transform filters on protocol (http, https, ws)
if mask.contains(NetworkFilterMask::IS_LEFT_ANCHOR) {
if filter_index_end - filter_index_start == 5
if filter_index_end == filter_index_start + 5
&& line[filter_index_start..].starts_with("ws://")
{
mask.set(NetworkFilterMask::FROM_WEBSOCKET, true);
mask.set(NetworkFilterMask::IS_LEFT_ANCHOR, false);
filter_index_start = filter_index_end;
} else if filter_index_end - filter_index_start == 7
} else if filter_index_end == filter_index_start + 7
&& line[filter_index_start..].starts_with("http://")
{
mask.set(NetworkFilterMask::FROM_HTTP, true);
mask.set(NetworkFilterMask::FROM_HTTPS, false);
mask.set(NetworkFilterMask::IS_LEFT_ANCHOR, false);
filter_index_start = filter_index_end;
} else if filter_index_end - filter_index_start == 8
} else if filter_index_end == filter_index_start + 8
&& line[filter_index_start..].starts_with("https://")
{
mask.set(NetworkFilterMask::FROM_HTTPS, true);
mask.set(NetworkFilterMask::FROM_HTTP, false);
mask.set(NetworkFilterMask::IS_LEFT_ANCHOR, false);
filter_index_start = filter_index_end;
} else if filter_index_end - filter_index_start == 8
} else if filter_index_end == filter_index_start + 8
&& line[filter_index_start..].starts_with("http*://")
{
mask.set(NetworkFilterMask::FROM_HTTPS, true);
@@ -520,7 +520,7 @@ impl NetworkFilter {
}
}

let filter: Option<String> = if filter_index_end - filter_index_start > 0 {
let filter: Option<String> = if filter_index_end > filter_index_start {
mask.set(
NetworkFilterMask::IS_REGEX,
check_is_regex(&line[filter_index_start..filter_index_end]),
@@ -193,5 +193,12 @@ mod tests {
assert!(parse_filter(r#"###\\\00DB \008D"#, true, true, true).is_ok());
assert!(parse_filter(r#"###\Û"#, true, true, true).is_ok());
}

#[test]
fn parse_filter_failed_fuzz_3() {
let input = "||$3p=/";
let result = parse_filter(input, true, true, true);
assert!(result.is_ok());
}

}
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.