state: check for array length in (*Contract).FromStackItem

Panicing here is not appropriate.
This commit is contained in:
Roman Khimov 2022-08-16 17:19:47 +03:00
parent f8857c5ebe
commit f7c5ab4f43
2 changed files with 4 additions and 0 deletions

View file

@ -61,6 +61,9 @@ func (c *Contract) FromStackItem(item stackitem.Item) error {
if !ok {
return errors.New("not an array")
}
if len(arr) != 5 {
return errors.New("invalid structure")
}
bi, ok := arr[0].Value().(*big.Int)
if !ok {
return errors.New("ID is not an integer")

View file

@ -98,6 +98,7 @@ func TestContractFromStackItem(t *testing.T) {
item stackitem.Item
}{
{"not an array", stackitem.Make(1)},
{"wrong array", stackitem.Make([]stackitem.Item{})},
{"id is not a number", stackitem.Make([]stackitem.Item{manifItem, counter, chash, nefItem, manifItem})},
{"id is out of range", stackitem.Make([]stackitem.Item{stackitem.Make(math.MaxUint32), counter, chash, nefItem, manifItem})},
{"counter is not a number", stackitem.Make([]stackitem.Item{id, manifItem, chash, nefItem, manifItem})},