ferrilab/bitvec

`copy_within` panics on empty range

cmrschwarz opened this issue · 0 comments

Unlike it's native rust equivalent, this crates' BitSlice::copy_within currently panics if called on an empty range, with an empty range, and index 0.
For my reading, this violates it's specification which has the sole restriction:

[...] both src and dest .. dest + src.len() must fall within the bounds of self

I believe it is fair to say that the range 0..0 is within the bounds of the range 0..0.

The panic occurs because BitSlice::copy_within calls BitSlice::assert_in_bounds, which then tests bounds.contains(&index), which of course fails.

I ran into this edge case in practice, it is very unexpected for the programmer and quite tedious to surround all calls to this function with if !slice.is_empty() { ... }.