From 23658550c40dd0e2680c2a16dc544c0b19e979fc Mon Sep 17 00:00:00 2001 From: FacundoMora Date: Wed, 1 Feb 2023 15:03:45 -0300 Subject: [PATCH] Fix binaryVarPrefixer to work with more bytes than prefix (#212) --- prefix/binary.go | 8 +++++--- prefix/binary_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/prefix/binary.go b/prefix/binary.go index 1f14f4ee..f3a71e3c 100644 --- a/prefix/binary.go +++ b/prefix/binary.go @@ -93,15 +93,17 @@ func (p *binaryVarPrefixer) DecodeLength(maxLen int, data []byte) (int, int, err return 0, 0, fmt.Errorf("not enough data length: %d to read: %d bytes", len(data), p.Digits) } + prefBytes := data[:p.Digits] + // it take 4 bytes to encode (u)int32 uint32Size := 4 // prepend with 0x00 if len of data is less than intSize (4 bytes) - if len(data) < uint32Size { - data = append(bytes.Repeat([]byte{0x00}, uint32Size-len(data)), data...) + if len(prefBytes) < uint32Size { + prefBytes = append(bytes.Repeat([]byte{0x00}, uint32Size-len(prefBytes)), prefBytes...) } - dataLen, err := bytesToInt(data) + dataLen, err := bytesToInt(prefBytes) if err != nil { return 0, 0, fmt.Errorf("decode length: %w", err) } diff --git a/prefix/binary_test.go b/prefix/binary_test.go index 213cca39..d8daeef4 100644 --- a/prefix/binary_test.go +++ b/prefix/binary_test.go @@ -152,6 +152,19 @@ func Test_binaryVarPrefixer_DecodeLength(t *testing.T) { wantRead: 1, wantErr: false, }, + { + name: "success(L)_withMoreData", + fields: fields{ + Digits: 1, + }, + args: args{ + maxLen: 32, + data: []byte{0x18, 0x0, 0x0, 0x0}, + }, + wantDataLen: 24, + wantRead: 1, + wantErr: false, + }, { name: "success(LLL)", fields: fields{ @@ -165,6 +178,19 @@ func Test_binaryVarPrefixer_DecodeLength(t *testing.T) { wantRead: 3, wantErr: false, }, + { + name: "success(LLL)_withMoreData", + fields: fields{ + Digits: 3, + }, + args: args{ + maxLen: 19999999, + data: []byte{0xab, 0xcb, 0xff, 0x0, 0x0, 0x0}, + }, + wantDataLen: 11258879, + wantRead: 3, + wantErr: false, + }, { name: "not_enough_data", fields: fields{