1
0
зеркало из https://github.com/glebtv/tui-textarea.git synced 2026-09-08 00:15:50 +03:00
Этот коммит содержится в:
rhysd
2022-06-17 12:51:22 +09:00
родитель 3e09d9a300
Коммит f166eb794f
5 изменённых файлов: 445 добавлений и 0 удалений

54
fuzz/fuzz_targets/edit.rs Обычный файл
Просмотреть файл

@@ -0,0 +1,54 @@
#![no_main]
use arbitrary::{Arbitrary, Result, Unstructured};
use libfuzzer_sys::fuzz_target;
use std::iter;
use std::str;
use tui_textarea::{Input, Key, TextArea};
fn arbitrary_input(u: &mut Unstructured) -> Result<Input> {
let i = u8::arbitrary(u)? % 15;
let key = match i {
1 => Key::Backspace,
2 => Key::Enter,
3 => Key::Left,
4 => Key::Right,
5 => Key::Up,
6 => Key::Down,
7 => Key::Tab,
8 => Key::Delete,
9 => Key::Home,
10 => Key::End,
11 => Key::PageUp,
12 => Key::PageDown,
13 => Key::Esc,
14 => Key::Null,
_ => match char::arbitrary(u)? {
'\n' | '\r' => Key::Enter,
c => Key::Char(c),
},
};
Ok(Input {
key,
ctrl: bool::arbitrary(u)?,
alt: bool::arbitrary(u)?,
})
}
fn fuzz(data: &[u8]) -> Result<()> {
let mut u = Unstructured::new(data);
let inputs: Vec<_> = iter::repeat_with(|| arbitrary_input(&mut u))
.take(10)
.collect::<Result<_>>()?;
let text = <&str>::arbitrary(&mut u)?;
let mut textarea = TextArea::from(text.lines());
for input in inputs {
textarea.input(input);
}
let _ = textarea.widget();
Ok(())
}
fuzz_target!(|data: &[u8]| {
let _ = fuzz(data);
});