зеркало из
https://github.com/glebtv/tui-textarea.git
synced 2026-09-08 00:15:50 +03:00
add insert_delete fuzzing target
Этот коммит содержится в:
@@ -72,6 +72,10 @@ tail -F debug.txt
|
|||||||
To run fuzzing tests, [cargo-fuzz][] and Rust nightly toolchain are necessary.
|
To run fuzzing tests, [cargo-fuzz][] and Rust nightly toolchain are necessary.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
# Show list of fuzzing targets
|
||||||
|
cargo +nightly fuzz list
|
||||||
|
|
||||||
|
# Run 'edit' fuzzing test case
|
||||||
cargo +nightly fuzz run edit
|
cargo +nightly fuzz run edit
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
2
fuzz/Cargo.lock
сгенерированный
2
fuzz/Cargo.lock
сгенерированный
@@ -363,7 +363,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tui-textarea"
|
name = "tui-textarea"
|
||||||
version = "0.2.4"
|
version = "0.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arbitrary",
|
"arbitrary",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
|
|||||||
@@ -23,3 +23,9 @@ name = "edit"
|
|||||||
path = "fuzz_targets/edit.rs"
|
path = "fuzz_targets/edit.rs"
|
||||||
test = false
|
test = false
|
||||||
doc = false
|
doc = false
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "insert_delete"
|
||||||
|
path = "fuzz_targets/insert_delete.rs"
|
||||||
|
test = false
|
||||||
|
doc = false
|
||||||
|
|||||||
26
fuzz/fuzz_targets/insert_delete.rs
Обычный файл
26
fuzz/fuzz_targets/insert_delete.rs
Обычный файл
@@ -0,0 +1,26 @@
|
|||||||
|
#![no_main]
|
||||||
|
|
||||||
|
use arbitrary::{Arbitrary as _, Result, Unstructured};
|
||||||
|
use libfuzzer_sys::fuzz_target;
|
||||||
|
use tui_textarea::{CursorMove, TextArea};
|
||||||
|
use tui_textarea_bench::{dummy_terminal, TerminalExt};
|
||||||
|
|
||||||
|
fn fuzz(data: &[u8]) -> Result<()> {
|
||||||
|
let mut term = dummy_terminal();
|
||||||
|
let mut textarea = TextArea::default();
|
||||||
|
let mut data = Unstructured::new(data);
|
||||||
|
for i in 0..100 {
|
||||||
|
textarea.move_cursor(CursorMove::arbitrary(&mut data)?);
|
||||||
|
if i % 2 == 0 {
|
||||||
|
textarea.insert_str(String::arbitrary(&mut data)?);
|
||||||
|
} else {
|
||||||
|
textarea.delete_str(usize::arbitrary(&mut data)?);
|
||||||
|
}
|
||||||
|
term.draw_textarea(&mut textarea);
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fuzz_target!(|data: &[u8]| {
|
||||||
|
fuzz(data).unwrap();
|
||||||
|
});
|
||||||
Ссылка в новой задаче
Block a user