From 039848d5fe81c794b0931046e5ffba1e961ea666 Mon Sep 17 00:00:00 2001 From: Ammar Bandukwala Date: Sat, 23 Sep 2017 22:52:03 -0500 Subject: [PATCH 1/2] return remaining cached value on error --- reader.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reader.go b/reader.go index d89c882..0b67774 100644 --- a/reader.go +++ b/reader.go @@ -100,7 +100,7 @@ func (r *reader) ReadBits(n byte) (u uint64, err error) { // Read last fraction, if any if n > 0 { if r.cache, err = r.in.ReadByte(); err != nil { - return 0, err + return u, err } shift := 8 - n u = u<>shift) From 84960aff96b1ff60be07e5623ecc9f4ef9503bf8 Mon Sep 17 00:00:00 2001 From: Ammar Bandukwala Date: Sat, 23 Sep 2017 22:58:03 -0500 Subject: [PATCH 2/2] unaligned EOF tests --- bitio_test.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bitio_test.go b/bitio_test.go index 3fe4266..a0b3217 100644 --- a/bitio_test.go +++ b/bitio_test.go @@ -94,6 +94,18 @@ func TestReaderEOF(t *testing.T) { eq(0, n) eq(io.EOF, err) } +func TestReaderUnalignedEOF(t *testing.T) { + eq := mighty.Eq(t) + + r := NewReader(bytes.NewBuffer([]byte{0xFF})) + + b, err := r.ReadBits(4) + eq(byte(15), byte(b)) + eq(nil, err) + b, err = r.ReadBits(5) + eq(byte(15), byte(b)) + eq(io.EOF, err) +} func TestReaderEOF2(t *testing.T) { eq, expEq := mighty.EqExpEq(t)