Skip to content

Commit

Permalink
Fix Bitfield from_bytes empty vec bug
Browse files Browse the repository at this point in the history
Credit to @kirk-baird for finding the bug with the fuzzer.

Co-authored-by: Kirk Baird <baird.k@outlook.com>
  • Loading branch information
michaelsproul and kirk-baird committed Aug 5, 2019
1 parent e21d3fe commit cd4dddb
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions eth2/utils/ssz_types/src/bitfield.rs
Expand Up @@ -163,8 +163,7 @@ impl<N: Unsigned + Clone> Bitfield<Variable<N>> {
pub fn from_bytes(bytes: Vec<u8>) -> Result<Self, Error> {
let mut initial_bitfield: Bitfield<Variable<N>> = {
let num_bits = bytes.len() * 8;
Bitfield::from_raw_bytes(bytes, num_bits)
.expect("Must have adequate bytes for bit count.")
Bitfield::from_raw_bytes(bytes, num_bits)?
};

let len = initial_bitfield
Expand Down Expand Up @@ -802,6 +801,11 @@ mod bitlist {

#[test]
fn ssz_decode() {
assert!(BitList0::from_ssz_bytes(&[]).is_err());
assert!(BitList1::from_ssz_bytes(&[]).is_err());
assert!(BitList8::from_ssz_bytes(&[]).is_err());
assert!(BitList16::from_ssz_bytes(&[]).is_err());

assert!(BitList0::from_ssz_bytes(&[0b0000_0000]).is_err());
assert!(BitList1::from_ssz_bytes(&[0b0000_0000, 0b0000_0000]).is_err());
assert!(BitList8::from_ssz_bytes(&[0b0000_0000]).is_err());
Expand Down

0 comments on commit cd4dddb

Please sign in to comment.