From 42a051e55ac196c90352c8adc608bba22b4c30f7 Mon Sep 17 00:00:00 2001 From: Anna Shaleva Date: Mon, 30 May 2022 11:01:12 +0300 Subject: [PATCH] core: DeepCopy notifiction event args inside System.Runtime.Notify --- cli/nep11_test.go | 2 +- pkg/core/interop/runtime/engine.go | 2 +- pkg/core/interop/runtime/util.go | 2 +- pkg/vm/opcodebench_test.go | 2 +- pkg/vm/stackitem/item.go | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cli/nep11_test.go b/cli/nep11_test.go index 17383af23..536c0929d 100644 --- a/cli/nep11_test.go +++ b/cli/nep11_test.go @@ -319,7 +319,7 @@ func TestNEP11_ND_OwnerOf_BalanceOf_Transfer(t *testing.T) { ScriptHash: verifyH, Name: "OnNEP11Payment", Item: stackitem.NewArray([]stackitem.Item{ - stackitem.NewBuffer(nftOwnerHash.BytesBE()), + stackitem.NewByteArray(nftOwnerHash.BytesBE()), stackitem.NewBigInteger(big.NewInt(1)), stackitem.NewByteArray(tokenID1), stackitem.NewByteArray([]byte("some_data")), diff --git a/pkg/core/interop/runtime/engine.go b/pkg/core/interop/runtime/engine.go index c5ff4a79b..d4920f584 100644 --- a/pkg/core/interop/runtime/engine.go +++ b/pkg/core/interop/runtime/engine.go @@ -68,7 +68,7 @@ func Notify(ic *interop.Context) error { if len(bytes) > MaxNotificationSize { return fmt.Errorf("notification size shouldn't exceed %d", MaxNotificationSize) } - ic.AddNotification(ic.VM.GetCurrentScriptHash(), name, stackitem.DeepCopy(stackitem.NewArray(args), false).(*stackitem.Array)) + ic.AddNotification(ic.VM.GetCurrentScriptHash(), name, stackitem.DeepCopy(stackitem.NewArray(args), true).(*stackitem.Array)) return nil } diff --git a/pkg/core/interop/runtime/util.go b/pkg/core/interop/runtime/util.go index 2e13ced6d..947b4b153 100644 --- a/pkg/core/interop/runtime/util.go +++ b/pkg/core/interop/runtime/util.go @@ -53,7 +53,7 @@ func GetNotifications(ic *interop.Context) error { ev := stackitem.NewArray([]stackitem.Item{ stackitem.NewByteArray(notifications[i].ScriptHash.BytesBE()), stackitem.Make(notifications[i].Name), - stackitem.DeepCopy(notifications[i].Item, false).(*stackitem.Array), + notifications[i].Item, }) arr.Append(ev) } diff --git a/pkg/vm/opcodebench_test.go b/pkg/vm/opcodebench_test.go index 34942397a..3ff86c09a 100644 --- a/pkg/vm/opcodebench_test.go +++ b/pkg/vm/opcodebench_test.go @@ -65,7 +65,7 @@ func opParamSlotsPushVM(op opcode.Opcode, param []byte, sslot int, slotloc int, for i := range items { item, ok := items[i].(stackitem.Item) if ok { - item = stackitem.DeepCopy(item, false) + item = stackitem.DeepCopy(item, true) } else { item = stackitem.Make(items[i]) } diff --git a/pkg/vm/stackitem/item.go b/pkg/vm/stackitem/item.go index d7cf0f0ed..4e3e0ae98 100644 --- a/pkg/vm/stackitem/item.go +++ b/pkg/vm/stackitem/item.go @@ -1217,7 +1217,7 @@ func deepCopy(item Item, seen map[Item]Item, asImmutable bool) Item { return NewByteArray(slice.Copy(*it)) case *Buffer: if asImmutable { - return NewByteArray(slice.Copy(*it)) // TODO: ported as is from C#, but is this correct? + return NewByteArray(slice.Copy(*it)) } return NewBuffer(slice.Copy(*it)) case Bool: