Skip to content

Instantly share code, notes, and snippets.

View adetaylor's full-sized avatar

Adrian Taylor adetaylor

View GitHub Profile
```rust
enum Thing<D> {
AnItem(i32),
C(D),
}
type A = Thing<()>;
type B = Thing<String>;
fn demo() {
@adetaylor
adetaylor / fuzz_itoa.rs
Created March 4, 2022 21:09
itoa fuzzer
#![no_main]
use libfuzzer_sys::fuzz_target;
use libfuzzer_sys::arbitrary;
#[derive(arbitrary::Arbitrary,Debug,Clone)]
enum IntegerInput {
I8(i8),
U8(u8),
I16(i16),
U16(u16),
@adetaylor
adetaylor / blank_fuzz.rs
Created March 4, 2022 21:09
Blank fuzzer
#![no_main]
use libfuzzer_sys::fuzz_target;
use libfuzzer_sys::arbitrary;
#[derive(arbitrary::Arbitrary,Debug,Clone)]
struct Inputs {
// Fuzzer inputs will go here
}
fuzz_target!(|input: Inputs| {
@adetaylor
adetaylor / Cargo.toml
Created March 4, 2022 21:10
itoa_fuzz Cargo.toml
[package]
name = "itoa-fuzz"
version = "0.0.0"
publish = false
edition = "2018"
[package.metadata]
cargo-fuzz = true
[dependencies]
@adetaylor
adetaylor / fuzz.txt
Created March 4, 2022 21:13
itoa fuzzer output
#2 INITED cov: 13 ft: 13 corp: 1/1b exec/s: 0 rss: 38Mb
NEW_FUNC[1/3]: 0x10dffaac0 in _$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$alloc..vec..spec_from_iter_nested..SpecFromIterNested$LT$T$C$I$GT$$GT$::from_iter::h7d5f17116ad2c7d7+0x0 (fuzz_itoa:x86_64+0x100020ac0)
NEW_FUNC[2/3]: 0x10dffebd0 in _$LT$core..iter..adapters..ResultShunt$LT$I$C$E$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$::try_fold::he18d49465e9f3273+0x0 (fuzz_itoa:x86_64+0x100024bd0)
#413 NEW cov: 30 ft: 30 corp: 2/9b lim: 8 exec/s: 413 rss: 40Mb L: 8/8 MS: 1 InsertRepeatedBytes-
NEW_FUNC[1/7]: 0x10dfdd110 in itoa::udiv128::udivmod_1e19::h3657cce0e02b8d1b+0x0 (fuzz_itoa:x86_64+0x100003110)
NEW_FUNC[2/7]: 0x10dfdfc30 in _$LT$fuzz_itoa..IntegerInput$u20$as$u20$arbitrary..Arbitrary$GT$::arbitrary_take_rest::h97a3cee5817cdb15+0x0 (fuzz_itoa:x86_64+0x100005c30)
#1816 NEW cov: 119 ft: 119 corp: 3/29b lim: 21 exec/s: 1816 rss: 40Mb L: 20/20 MS: 3 InsertRepeatedBytes-CrossOver-InsertRepeatedByte
TEST(ValuesTest, Overflow) {
Value::List parent;
parent.Append(1);
parent.Append(2);
parent[3];
}
TEST(ValuesTest, TypeConfusion) {
Value parent(Value::Type::LIST);
parent.GetList().Append(Value(Value::Type::LIST));
Value& child = parent.GetList().back();
child.SetKey("a", Value(3));
}
TEST(ValuesTest, UseAfterFree) {
Value parent(Value::Type::LIST);
parent.GetList().Append(Value(Value::Type::LIST));
Value& child = parent.GetList().back();
parent.Append("oops");
child.Append("oh dear");
}
TEST(ValuesTest, DataRace) {
Value::List parent;
parent.Append(1);
parent.Append(2);
parent.Append(3);
for (auto it = parent.cbegin(); it != parent.cend(); it++) {
if (*it == 2) {
parent.reserve(100);
}
}