From 2c7430583c2dae6515c8df054d7a70a65a4d5816 Mon Sep 17 00:00:00 2001 From: Anna Shaleva Date: Mon, 5 Aug 2024 12:07:22 +0300 Subject: [PATCH] smartcontrct: take care of manifest permission descriptor wildcardness Starting from b10af1ed313283e081199a24cbda5ae5c99427b0 (*WildPermissionDescs).Add method's call is not enough to construct a proper restricted permission descriptor, because Wildcard field should be set properly at the same time. Ref. #3523. Signed-off-by: Anna Shaleva --- pkg/smartcontract/manifest/container.go | 8 ++++++-- pkg/smartcontract/manifest/container_test.go | 11 +++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/pkg/smartcontract/manifest/container.go b/pkg/smartcontract/manifest/container.go index ca2a84779..1e8adaeda 100644 --- a/pkg/smartcontract/manifest/container.go +++ b/pkg/smartcontract/manifest/container.go @@ -64,8 +64,12 @@ func (c *WildPermissionDescs) Restrict() { // Add adds v to the container. func (c *WildStrings) Add(v string) { c.Value = append(c.Value, v) } -// Add adds v to the container. -func (c *WildPermissionDescs) Add(v PermissionDesc) { c.Value = append(c.Value, v) } +// Add adds v to the container and converts container to non-wildcard (if it's still +// wildcard). +func (c *WildPermissionDescs) Add(v PermissionDesc) { + c.Value = append(c.Value, v) + c.Wildcard = false +} // MarshalJSON implements the json.Marshaler interface. func (c WildStrings) MarshalJSON() ([]byte, error) { diff --git a/pkg/smartcontract/manifest/container_test.go b/pkg/smartcontract/manifest/container_test.go index 1e3b5e420..2a98a9e65 100644 --- a/pkg/smartcontract/manifest/container_test.go +++ b/pkg/smartcontract/manifest/container_test.go @@ -81,6 +81,17 @@ func TestContainer_Add(t *testing.T) { require.False(t, c.Contains(PermissionDesc{Type: PermissionHash, Value: random.Uint160()})) require.False(t, c.Contains(PermissionDesc{Type: PermissionGroup, Value: pkRand.PublicKey()})) }) + + t.Run("from wildcard", func(t *testing.T) { + c := &WildPermissionDescs{ + Value: nil, + Wildcard: true, + } + require.True(t, c.IsWildcard()) + + c.Add(PermissionDesc{Type: PermissionHash, Value: random.Uint160()}) + require.False(t, c.IsWildcard()) + }) } func TestContainer_MarshalJSON(t *testing.T) {