stackitem: limit deserialization to MaxDeserialized items
Follow neo-project/neo#2531. Even though it's not strictly required (our node handles problematic script just fine) we better be compliant wrt deserialization behavior. MaxDeserialized is introduced to avoid moving MaxStackSize which is a VM parameter.
This commit is contained in:
parent
aab18c3083
commit
df2430d5e4
3 changed files with 53 additions and 9 deletions
|
@ -144,7 +144,7 @@ func TestSerialize(t *testing.T) {
|
|||
for i := 0; i < MaxArraySize; i++ {
|
||||
m.Add(Make(i), zeroByteArray)
|
||||
}
|
||||
testSerialize(t, nil, m)
|
||||
// testSerialize(t, nil, m) // It contains too many elements already, so ErrTooBig.
|
||||
|
||||
m.Add(Make(100500), zeroByteArray)
|
||||
data, err := Serialize(m)
|
||||
|
@ -154,6 +154,23 @@ func TestSerialize(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestDeserializeTooManyElements(t *testing.T) {
|
||||
item := Make(0)
|
||||
for i := 0; i < MaxDeserialized-1; i++ { // 1 for zero inner element.
|
||||
item = Make([]Item{item})
|
||||
}
|
||||
data, err := Serialize(item)
|
||||
require.NoError(t, err)
|
||||
_, err = Deserialize(data)
|
||||
require.NoError(t, err)
|
||||
|
||||
item = Make([]Item{item})
|
||||
data, err = Serialize(item)
|
||||
require.NoError(t, err)
|
||||
_, err = Deserialize(data)
|
||||
require.True(t, errors.Is(err, ErrTooBig), err)
|
||||
}
|
||||
|
||||
func BenchmarkEncodeBinary(b *testing.B) {
|
||||
arr := getBigArray(15)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue