From 1d34e2b2a5bd245a7c4e96fc40b261deee91814f Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Tue, 2 Apr 2019 15:34:18 +1100 Subject: [PATCH] Fix bug in bitfield. --- eth2/utils/boolean-bitfield/src/lib.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/eth2/utils/boolean-bitfield/src/lib.rs b/eth2/utils/boolean-bitfield/src/lib.rs index 0634490a5..d04516dba 100644 --- a/eth2/utils/boolean-bitfield/src/lib.rs +++ b/eth2/utils/boolean-bitfield/src/lib.rs @@ -33,12 +33,21 @@ impl BooleanBitfield { } /// Create a new bitfield with the given length `initial_len` and all values set to `bit`. + /// + /// Note: if `initial_len` is not a multiple of 8, the remaining bits will be set to `false` + /// regardless of `bit`. pub fn from_elem(initial_len: usize, bit: bool) -> Self { // BitVec can panic if we don't set the len to be a multiple of 8. - let len = ((initial_len + 7) / 8) * 8; - Self { - 0: BitVec::from_elem(len, bit), + let full_len = ((initial_len + 7) / 8) * 8; + let mut bitfield = BitVec::from_elem(full_len, false); + + if bit { + for i in 0..initial_len { + bitfield.set(i, true); + } } + + Self { 0: bitfield } } /// Create a new bitfield using the supplied `bytes` as input