forked from TrueCloudLab/neoneo-go
compiler: disallow named types redeclaration via contract config
Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
This commit is contained in:
parent
865bd6c9cc
commit
44dfe8342d
4 changed files with 34 additions and 1 deletions
|
@ -547,4 +547,7 @@ func TestCompile_GuessEventTypes(t *testing.T) {
|
||||||
t.Run("extended types mismatch", func(t *testing.T) {
|
t.Run("extended types mismatch", func(t *testing.T) {
|
||||||
check(t, filepath.Join("testdata", "invalid8"), "inconsistent usages of event `SomeEvent`: extended type of param #0 mismatch")
|
check(t, filepath.Join("testdata", "invalid8"), "inconsistent usages of event `SomeEvent`: extended type of param #0 mismatch")
|
||||||
})
|
})
|
||||||
|
t.Run("named types redeclare", func(t *testing.T) {
|
||||||
|
check(t, filepath.Join("testdata", "invalid9"), "configured declared named type intersects with the contract's one: `invalid9.NamedStruct`")
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
12
cli/smartcontract/testdata/invalid9/invalid.go
vendored
Normal file
12
cli/smartcontract/testdata/invalid9/invalid.go
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
package invalid9
|
||||||
|
|
||||||
|
import "github.com/nspcc-dev/neo-go/pkg/interop/runtime"
|
||||||
|
|
||||||
|
type NamedStruct struct {
|
||||||
|
SomeInt int
|
||||||
|
}
|
||||||
|
|
||||||
|
func Main() NamedStruct {
|
||||||
|
runtime.Notify("SomeEvent", []interface{}{123})
|
||||||
|
return NamedStruct{SomeInt: 123}
|
||||||
|
}
|
16
cli/smartcontract/testdata/invalid9/invalid.yml
vendored
Normal file
16
cli/smartcontract/testdata/invalid9/invalid.yml
vendored
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
name: Test undeclared event
|
||||||
|
events:
|
||||||
|
- name: SomeEvent
|
||||||
|
parameters:
|
||||||
|
- name: p1
|
||||||
|
type: Array
|
||||||
|
extendedtype:
|
||||||
|
base: Array
|
||||||
|
name: invalid9.NamedStruct
|
||||||
|
namedtypes:
|
||||||
|
invalid9.NamedStruct:
|
||||||
|
base: Array
|
||||||
|
name: invalid9.NamedStruct
|
||||||
|
fields:
|
||||||
|
- field: SomeInt
|
||||||
|
base: Integer
|
|
@ -340,7 +340,9 @@ func CompileAndSave(src string, o *Options) ([]byte, error) {
|
||||||
cfg.NamedTypes = di.NamedTypes
|
cfg.NamedTypes = di.NamedTypes
|
||||||
}
|
}
|
||||||
for name, et := range o.DeclaredNamedTypes {
|
for name, et := range o.DeclaredNamedTypes {
|
||||||
// TODO: handle name conflict (it can happen due to invalid user input e.g.)
|
if _, ok := cfg.NamedTypes[name]; ok {
|
||||||
|
return nil, fmt.Errorf("configured declared named type intersects with the contract's one: `%s`", name)
|
||||||
|
}
|
||||||
cfg.NamedTypes[name] = et
|
cfg.NamedTypes[name] = et
|
||||||
}
|
}
|
||||||
for _, e := range o.ContractEvents {
|
for _, e := range o.ContractEvents {
|
||||||
|
|
Loading…
Reference in a new issue