Skip to content

Commit 7db34f5

Browse files
sashkaJoseph Gilby
authored and
Joseph Gilby
committed
Make fuzzing to compile and run
1 parent 271802c commit 7db34f5

File tree

4 files changed

+25
-13
lines changed

4 files changed

+25
-13
lines changed

fuzz/.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
21
target
32
corpus
43
artifacts
4+
coverage

fuzz/Cargo.toml

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
1-
21
[package]
32
name = "quick-xml-fuzz"
4-
version = "0.0.1"
3+
version = "0.0.0"
54
authors = ["Automatically generated"]
65
publish = false
6+
edition = "2018"
77

88
[package.metadata]
99
cargo-fuzz = true
1010

11+
[dependencies]
12+
libfuzzer-sys = "0.4"
13+
1114
[dependencies.quick-xml]
1215
path = ".."
13-
[dependencies.libfuzzer-sys]
14-
git = "https://github.com/rust-fuzz/libfuzzer-sys.git"
1516

1617
# Prevent this from interfering with workspaces
1718
[workspace]
@@ -20,3 +21,5 @@ members = ["."]
2021
[[bin]]
2122
name = "fuzz_target_1"
2223
path = "fuzz_targets/fuzz_target_1.rs"
24+
test = false
25+
doc = false

fuzz/README.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Run fuzzing with `-O` to avoid false positives at `debug_assert!`, e.g.:
2+
3+
```bash
4+
cargo fuzz run -O -j4 fuzz_target_1
5+
```
6+
7+
See also: https://github.com/rust-fuzz/cargo-fuzz

fuzz/fuzz_targets/fuzz_target_1.rs

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#![no_main]
2-
#[macro_use] extern crate libfuzzer_sys;
2+
use libfuzzer_sys::fuzz_target;
33

44
use quick_xml::events::Event;
55
use quick_xml::reader::Reader;
@@ -12,20 +12,22 @@ fuzz_target!(|data: &[u8]| {
1212
let mut buf = vec![];
1313
loop {
1414
match reader.read_event_into(&mut buf) {
15-
Ok(Event::Start(ref e)) | Ok(Event::Empty(ref e))=> {
16-
if e.unescaped().is_err() {
17-
break;
18-
}
15+
Ok(Event::Start(ref e)) | Ok(Event::Empty(ref e)) => {
1916
for a in e.attributes() {
20-
if a.ok().map_or(false, |a| a.unescaped_value().is_err()) {
17+
if a.ok().map_or(false, |a| a.unescape_value().is_err()) {
2118
break;
2219
}
2320
}
2421
}
2522
Ok(Event::Text(ref e)) | Ok(Event::Comment(ref e))
26-
| Ok(Event::CData(ref e)) | Ok(Event::PI(ref e))
23+
| Ok(Event::PI(ref e))
2724
| Ok(Event::DocType(ref e)) => {
28-
if e.unescaped().is_err() {
25+
if e.unescape().is_err() {
26+
break;
27+
}
28+
}
29+
Ok(Event::CData(e)) => {
30+
if e.escape().is_err() {
2931
break;
3032
}
3133
}

0 commit comments

Comments
 (0)