From ac6815cb162818a9c8023d142aa53982c3a6b3cd Mon Sep 17 00:00:00 2001 From: svz-ya Date: Mon, 10 Feb 2025 20:44:34 +0300 Subject: [PATCH] Fix DecodeLength() for long values in variable length HEX field --- prefix/hex.go | 4 ++-- prefix/hex_test.go | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/prefix/hex.go b/prefix/hex.go index 33b282c7..b7f6a874 100644 --- a/prefix/hex.go +++ b/prefix/hex.go @@ -29,7 +29,7 @@ func (p *hexFixedPrefixer) EncodeLength(fixLen, dataLen int) ([]byte, error) { return []byte{}, nil } -func (p *hexFixedPrefixer) DecodeLength(fixLen int, data []byte) (int, int, error) { +func (p *hexFixedPrefixer) DecodeLength(fixLen int, _ []byte) (int, int, error) { return fixLen, 0, nil } @@ -63,7 +63,7 @@ func (p *hexVarPrefixer) DecodeLength(maxLen int, data []byte) (int, int, error) return 0, 0, fmt.Errorf(notEnoughDataToRead, length, len(data)) } - dataLen, err := strconv.ParseInt(string(data[:length]), 16, p.Digits*8) + dataLen, err := strconv.ParseUint(string(data[:length]), 16, p.Digits*8) if err != nil { return 0, 0, err } diff --git a/prefix/hex_test.go b/prefix/hex_test.go index 52a2033a..c51e866c 100644 --- a/prefix/hex_test.go +++ b/prefix/hex_test.go @@ -113,6 +113,19 @@ func Test_hexVarPrefixer_DecodeLength(t *testing.T) { wantRead: 6, wantErr: false, }, + { + name: "data_length_exceeds_signed_byte", + fields: fields{ + Digits: 1, + }, + args: args{ + maxLen: 255, + data: []byte("FFzdsadsdasdsdasasdasadadasdasdsafsdgerherhrtherherhwergewrergtertwetwegwhrwehjerjetuery4wtwegwrjerjrejereryereye4y45735u45u45ehe45yy4t34t34y4y43h34h3yh3hgey5jhrtjrjerjnerj45ki45kjtk4e5ue5u5eu545u45j45j45uj45uj45u45u45u45u45jgjgjgfjrtjtjjtrjrtjrtjtrjrthhrew"), + }, + wantDataLen: 0xFF, + wantRead: 2, + wantErr: false, + }, { name: "not_enough_data", fields: fields{