[#356] refs: Handle uint32 overflow in SubnetID text format

Clarify the bit size limit in `SubnetID.UnmarshalText` method. Cover
overflow case in unit test.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2021-11-22 12:34:09 +03:00 committed by LeL
parent 4560e447e1
commit dc292864aa
2 changed files with 13 additions and 1 deletions

View file

@ -199,7 +199,9 @@ func (s *SubnetID) MarshalText() ([]byte, error) {
} }
// UnmarshalText decodes SubnetID from the text according to NeoFS API V2 protocol: // UnmarshalText decodes SubnetID from the text according to NeoFS API V2 protocol:
// should be base-10 integer string format. // should be base-10 integer string format with bitsize = 32.
//
// Returns strconv.ErrRange if integer overflows uint32.
// //
// Must not be called on nil. // Must not be called on nil.
// //

View file

@ -1,6 +1,7 @@
package refs_test package refs_test
import ( import (
"math"
"strconv" "strconv"
"testing" "testing"
@ -47,4 +48,13 @@ func TestSubnetID_UnmarshalText(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.EqualValues(t, val, id.GetValue()) require.EqualValues(t, val, id.GetValue())
t.Run("uint32 overflow", func(t *testing.T) {
txt := strconv.FormatUint(math.MaxUint32+1, 10)
var id refs.SubnetID
err := id.UnmarshalText([]byte(txt))
require.ErrorIs(t, err, strconv.ErrRange)
})
} }