1
0
зеркало из https://github.com/glebtv/tui-textarea.git synced 2026-09-03 14:26:17 +03:00

add insert_delete fuzzing target

Этот коммит содержится в:
rhysd
2023-11-03 23:10:48 +09:00
родитель 217c5079f0
Коммит 069e1351a7
4 изменённых файлов: 37 добавлений и 1 удалений

Просмотреть файл

@@ -72,6 +72,10 @@ tail -F debug.txt
To run fuzzing tests, [cargo-fuzz][] and Rust nightly toolchain are necessary.
```sh
# Show list of fuzzing targets
cargo +nightly fuzz list
# Run 'edit' fuzzing test case
cargo +nightly fuzz run edit
```

2
fuzz/Cargo.lock сгенерированный
Просмотреть файл

@@ -363,7 +363,7 @@ dependencies = [
[[package]]
name = "tui-textarea"
version = "0.2.4"
version = "0.3.0"
dependencies = [
"arbitrary",
"crossterm",

Просмотреть файл

@@ -23,3 +23,9 @@ name = "edit"
path = "fuzz_targets/edit.rs"
test = false
doc = false
[[bin]]
name = "insert_delete"
path = "fuzz_targets/insert_delete.rs"
test = false
doc = false

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();
});