core: pop all args from stack before validation checks in Notify

We should match the C# behaviour.
This commit is contained in:
Anna Shaleva 2021-03-31 13:54:53 +03:00
parent 793f27084b
commit 93530fa8fa
2 changed files with 3 additions and 3 deletions

View file

@ -52,11 +52,11 @@ func GetTrigger(ic *interop.Context) error {
// in neo-go the only meaningful thing to do here is to log. // in neo-go the only meaningful thing to do here is to log.
func Notify(ic *interop.Context) error { func Notify(ic *interop.Context) error {
name := ic.VM.Estack().Pop().String() name := ic.VM.Estack().Pop().String()
elem := ic.VM.Estack().Pop()
args := elem.Array()
if len(name) > MaxEventNameLen { if len(name) > MaxEventNameLen {
return fmt.Errorf("event name must be less than %d", MaxEventNameLen) return fmt.Errorf("event name must be less than %d", MaxEventNameLen)
} }
elem := ic.VM.Estack().Pop()
args := elem.Array()
// But it has to be serializable, otherwise we either have some broken // But it has to be serializable, otherwise we either have some broken
// (recursive) structure inside or an interop item that can't be used // (recursive) structure inside or an interop item that can't be used
// outside of the interop subsystem anyway. // outside of the interop subsystem anyway.

View file

@ -142,7 +142,7 @@ func TestNotify(t *testing.T) {
return ic return ic
} }
t.Run("big name", func(t *testing.T) { t.Run("big name", func(t *testing.T) {
ic := newIC(string(make([]byte, MaxEventNameLen+1)), []byte{42}) ic := newIC(string(make([]byte, MaxEventNameLen+1)), stackitem.NewArray([]stackitem.Item{stackitem.Null{}}))
require.Error(t, Notify(ic)) require.Error(t, Notify(ic))
}) })
t.Run("recursive struct", func(t *testing.T) { t.Run("recursive struct", func(t *testing.T) {