diff --git a/compression/rle/read_write.go b/compression/rle/read_write.go index e6f78e3724f2547774149a792bf35a306422f669..b4b73dab4dc440c3495743b760ebf019b0894cf3 100644 --- a/compression/rle/read_write.go +++ b/compression/rle/read_write.go @@ -37,6 +37,8 @@ func Decompress(dat []byte) ([]byte, error) { } else { return nil, errors.New("error reading bytes. token encountered without proceeding bytes") } + } else { + buf.WriteByte(dat[i]) } } diff --git a/compression/rle/read_write_test.go b/compression/rle/read_write_test.go index 944822a47e7472004648b925258621f83cff1119..76ceb635024bdb8edc138eb7986d8d11df4ed504 100644 --- a/compression/rle/read_write_test.go +++ b/compression/rle/read_write_test.go @@ -91,3 +91,25 @@ func TestCompressMulti(t *testing.T) { t.Error("expected", exp, "got", res) } } + +func TestCompressDecompress(t *testing.T) { + var in []byte + + for i := 0; i < 20; i++ { + in = append(in, []byte{0, 0, 0, 0, 0}...) + in = append(in, crypto.Sha3([]byte(""))...) + in = append(in, crypto.Sha3([]byte{0x80})...) + in = append(in, []byte{123, 2, 19, 89, 245, 254, 255, token, 98, 233}...) + in = append(in, token) + } + + c := Compress(in) + d, err := Decompress(c) + if err != nil { + t.Error(err) + } + + if bytes.Compare(d, in) != 0 { + t.Error("multi failed\n", d, "\n", in) + } +}