Skip to content

Commit

Permalink
feat: Support 1.0.0-rc.1
Browse files Browse the repository at this point in the history
  • Loading branch information
nathaniel-brough committed Nov 29, 2023
1 parent d2410a6 commit 01c0cd0
Show file tree
Hide file tree
Showing 22 changed files with 453 additions and 787 deletions.
8 changes: 5 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "embedded-hal-fuzz"
version = "0.1.2"
version = "1.0.0-rc.1"
edition = "2021"
authors = ["Nathaniel Brough"]
repository = "https://github.com/silvergasp/embedded-hal-fuzz"
Expand All @@ -10,13 +10,15 @@ license = "MIT"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
embedded-hal = {version = "0.2.7", features = ["unproven"]}
arbitrary = { version = "1.3.2", features = ["derive"] }
embedded-hal = {version = "1.0.0-rc.1"}
nb = "1.0.0"
thiserror = "1.0.50"

[dev-dependencies]
num-traits = "0.2"
num-derive = "0.3"
libfuzzer-sys = "0.4"

[package.metadata.commits]
defaults = true
defaults = true
10 changes: 3 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,14 @@


# embedded-hal-fuzz
A fuzzing library for rust hardware drivers. Checkout the [docs](https://docs.rs/embedded-hal-fuzz/0.1.0/embedded_hal_fuzz/) for more details.
A fuzzing library for rust hardware drivers. Checkout the [docs](https://docs.rs/embedded-hal-fuzz/1.0.0-rc.1/embedded_hal_fuzz/) for more details.

## Feature status

- [x] I²C (Read, WriteRead)
- [x] SPI (FullDuplex, Write, WriteIter, Transactional)
- [ ] No-op delay
- [ ] Actual delay
- [x] No-op delay
- [x] Serial
- [ ] RNG (Probably won't implement)
- [x] I/O pins (InputPin, OutputPin)
- [ ] ADC
- [ ] Timers
- [ ] ...
- [x] PWM

32 changes: 1 addition & 31 deletions fuzz/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ cargo-fuzz = true

[dependencies]
libfuzzer-sys = "0.4"
embedded-hal = {version="0.2.7", features=["unproven"]}
embedded-hal = {version = "1.0.0-rc.1"}

[dependencies.embedded-hal-fuzz]
path = ".."
Expand Down Expand Up @@ -42,33 +42,3 @@ name = "digital_good"
path = "fuzz_targets/digital_good.rs"
test = false
doc = false

[[bin]]
name = "spi_good"
path = "fuzz_targets/spi_good.rs"
test = false
doc = false

[[bin]]
name = "spi_dodgy"
path = "fuzz_targets/spi_dodgy.rs"
test = false
doc = false

[[bin]]
name = "multiple_io"
path = "fuzz_targets/multiple_io.rs"
test = false
doc = false

[[bin]]
name = "adc_good"
path = "fuzz_targets/adc_good.rs"
test = false
doc = false

[[bin]]
name = "adc_dodgy"
path = "fuzz_targets/adc_dodgy.rs"
test = false
doc = false
40 changes: 0 additions & 40 deletions fuzz/fuzz_targets/adc_dodgy.rs

This file was deleted.

40 changes: 0 additions & 40 deletions fuzz/fuzz_targets/adc_good.rs

This file was deleted.

18 changes: 4 additions & 14 deletions fuzz/fuzz_targets/digital_dodgy.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#![no_main]

/// This fuzz test should fail.
use embedded_hal::digital::v2::InputPin;
use embedded_hal::digital::InputPin;
use embedded_hal_fuzz as hal_fuzz;
use libfuzzer_sys::fuzz_target;

Expand All @@ -24,16 +23,7 @@ impl<T: InputPin> DodgyDriver<T> {
}
}

type Error = ();

fuzz_target!(|data: &[u8]| {
// Ignore empty inputs.
use hal_fuzz::shared_data::FuzzData;
if data.len() > 0 {
let data = FuzzData::new(data);
let pin: hal_fuzz::digital::InputPinFuzz<'_, Error> =
hal_fuzz::digital::InputPinFuzz::new(data);
let mut driver = DodgyDriver::new(pin);
let _ = driver.get_dodgy_pin();
}
fuzz_target!(|pin: hal_fuzz::digital::ArbitraryInputPin| {
let mut driver = DodgyDriver::new(pin);
let _ = driver.get_dodgy_pin();
});
17 changes: 4 additions & 13 deletions fuzz/fuzz_targets/digital_good.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#![no_main]
/// This fuzz test should pass.
use embedded_hal::digital::v2::InputPin;
use embedded_hal::digital::InputPin;
use embedded_hal_fuzz as hal_fuzz;
use libfuzzer_sys::fuzz_target;

Expand All @@ -23,16 +23,7 @@ impl<T: InputPin> Driver<T> {
}
}

type Error = ();

fuzz_target!(|data: &[u8]| {
use hal_fuzz::shared_data::FuzzData;
// Ignore empty inputs.
if data.len() > 0 {
let data = FuzzData::new(data);
let pin: hal_fuzz::digital::InputPinFuzz<'_, Error> =
hal_fuzz::digital::InputPinFuzz::new(data);
let mut driver = Driver::new(pin);
let _ = driver.get_pinstate();
}
fuzz_target!(|pin: hal_fuzz::digital::ArbitraryInputPin| {
let mut driver = Driver::new(pin);
let _ = driver.get_pinstate();
});
19 changes: 6 additions & 13 deletions fuzz/fuzz_targets/i2c_dodgy.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#![no_main]
/// This fuzz test should fail.
use embedded_hal::blocking::i2c::{Read, WriteRead};
use embedded_hal::i2c::{I2c, SevenBitAddress};
use embedded_hal_fuzz as hal_fuzz;
use libfuzzer_sys::fuzz_target;

struct DodgyDriver<T: Read + WriteRead> {
struct DodgyDriver<T> {
i2c: T,
}

impl<T: Read + WriteRead> DodgyDriver<T> {
impl<T: I2c> DodgyDriver<T> {
fn new(i2c: T) -> Self {
Self { i2c }
}
Expand All @@ -26,15 +26,8 @@ impl<T: Read + WriteRead> DodgyDriver<T> {
}
}

type I2cError = ();

fuzz_target!(|data: &[u8]| {
fuzz_target!(|i2c: hal_fuzz::i2c::ArbitraryI2c<SevenBitAddress>| {
// Ignore empty inputs.
if data.len() > 0 {
use hal_fuzz::shared_data::FuzzData;
let data = FuzzData::new(data);
let i2c: hal_fuzz::i2c::I2cFuzz<'_, I2cError> = hal_fuzz::i2c::I2cFuzz::new(data);
let mut driver = DodgyDriver::new(i2c);
let _ = driver.get_dodgy_scaled_value();
}
let mut driver = DodgyDriver::new(i2c);
let _ = driver.get_dodgy_scaled_value();
});
19 changes: 6 additions & 13 deletions fuzz/fuzz_targets/i2c_good.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#![no_main]
/// This fuzz test should pass.
use embedded_hal::blocking::i2c::{Read, WriteRead};
use embedded_hal::i2c::{I2c, SevenBitAddress};
use embedded_hal_fuzz as hal_fuzz;
use libfuzzer_sys::fuzz_target;

struct GoodDriver<T: Read + WriteRead> {
struct GoodDriver<T> {
i2c: T,
}

impl<T: Read + WriteRead> GoodDriver<T> {
impl<T: I2c> GoodDriver<T> {
fn new(i2c: T) -> Self {
Self { i2c }
}
Expand All @@ -27,15 +27,8 @@ impl<T: Read + WriteRead> GoodDriver<T> {
}
}

type I2cError = ();

fuzz_target!(|data: &[u8]| {
fuzz_target!(|i2c: hal_fuzz::i2c::ArbitraryI2c<SevenBitAddress>| {
// Ignore empty inputs.
if data.len() > 0 {
use hal_fuzz::shared_data::FuzzData;
let data = FuzzData::new(data);
let i2c: hal_fuzz::i2c::I2cFuzz<'_, I2cError> = hal_fuzz::i2c::I2cFuzz::new(data);
let mut driver = GoodDriver::new(i2c);
let _ = driver.get_scaled_value();
}
let mut driver = GoodDriver::new(i2c);
let _ = driver.get_scaled_value();
});
41 changes: 0 additions & 41 deletions fuzz/fuzz_targets/multiple_io.rs

This file was deleted.

38 changes: 0 additions & 38 deletions fuzz/fuzz_targets/spi_dodgy.rs

This file was deleted.

Loading

0 comments on commit 01c0cd0

Please sign in to comment.