Skip to content

Commit

Permalink
Fix fuzzing, minor README formats
Browse files Browse the repository at this point in the history
  • Loading branch information
blaind committed Apr 13, 2021
1 parent ccfa7da commit bcd723e
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 18 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "webp-animation"
version = "0.2.0"
version = "0.2.1"
authors = ["Mika Vatanen <[email protected]>"]
license = "MIT OR Apache-2.0"
readme = "README.md"
Expand Down
29 changes: 21 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,23 @@ Non-goals
Will take a webp buffer, and try to decode it to frame(s)

```rust
use webp_animation::Decoder;
use webp_animation::prelude::*;

let buffer = std::fs::read("./data/animated.webp").unwrap();
let decoder = Decoder::new(&buffer).unwrap();

for frame in decoder.into_iter() {
assert_eq!(frame.dimensions(), (400, 400));
assert_eq!(frame.data().len(), 400 * 400 * 4); // w * h * rgba
assert_eq!(frame.dimensions(), (400, 400));

// if feature `image` is enabled (not by default), one can convert data to [`Image::ImageBuffer`]
assert_eq!(frame.into_image().unwrap().dimensions(), (400, 400));
// w * h * rgba
assert_eq!(frame.data().len(), 400 * 400 * 4);

// if feature `image` is enabled (not by default),
// one can convert data to [`Image::ImageBuffer`]
assert_eq!(
frame.into_image().unwrap().dimensions(),
(400, 400)
);
}
```

Expand All @@ -62,19 +68,26 @@ Will take `n` frames as an input. WebP binary data is output at the end
(wrapped into `WebPData` which acts as a `&[u8]`)

```rust
use webp_animation::Encoder;
use webp_animation::prelude::*;

// setup
let dimensions = (64, 32);
let bright_frame = [255, 255, 255, 255].repeat(64 * 32);
let dark_frame = [0, 0, 0, 255].repeat(64 * 32);

// init encoder. uses by default lossless encoding, for other alternatives see documentation about `new_with_options`
// init encoder. uses by default lossless encoding,
// for other alternatives see documentation about
// `new_with_options`
let mut encoder = Encoder::new(dimensions).unwrap();

// insert frames to specific (increasing) timestamps
for i in 0..5 {
let rgba_data = if i % 2 == 0 { &bright_frame } else { &dark_frame };
let rgba_data = if i % 2 == 0 {
&bright_frame
} else {
&dark_frame
};

let frame_timestamp = i * 170;

encoder.add_frame(rgba_data, frame_timestamp).unwrap();
Expand Down
28 changes: 23 additions & 5 deletions fuzz/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 7 additions & 1 deletion fuzz/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,16 @@ cargo-fuzz = true

[dependencies]
libfuzzer-sys = "0.3.0"
webp_animation = { path = ".." }
webp-animation = { path = ".." }

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

[[bin]]
name = "decoder"
path = "fuzz_targets/decoder.rs"
test = false
doc = false
16 changes: 16 additions & 0 deletions fuzz/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Fuzzing

## Decoder

```rust
$ cargo rustc --bin decoder -- -C passes='sancov' -C llvm-args='-sanitizer-coverage-level=3' -C llvm-args='-sanitizer-coverage-inline-8bit-counters' -Z sanitizer=address
$ ./target/debug/decoder
```

## Encoder

```rust
$ cargo rustc --bin encoder -- -C passes='sancov' -C llvm-args='-sanitizer-coverage-level=3' -C llvm-args='-sanitizer-coverage-inline-8bit-counters' -Z sanitizer=address
$ ./target/debug/encoder
```

2 changes: 1 addition & 1 deletion fuzz/fuzz_targets/decoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use libfuzzer_sys::fuzz_target;
use webp_animation::Decoder;

fuzz_target!(|data: &[u8]| {
let decoder = match Decoder::new(&data, Default::default()) {
let decoder = match Decoder::new(&data) {
Ok(dec) => dec,
Err(_) => {
return;
Expand Down
1 change: 0 additions & 1 deletion fuzz/fuzz_targets/encoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ use libfuzzer_sys::fuzz_target;
use webp_animation::Encoder;

fuzz_target!(|data: &[u8]| {

let mut encoder = Encoder::new((64, 64)).unwrap();
if let Ok(_) = encoder.add_frame(data, 0) {
let _ = encoder.finalize(100);
Expand Down

0 comments on commit bcd723e

Please sign in to comment.