From db977ce38d4c3c70d36253e9475eb5015c0361ff Mon Sep 17 00:00:00 2001 From: Evgeniy Stratonikov Date: Mon, 30 May 2022 15:46:40 +0300 Subject: [PATCH] vm: add fuzz test for `ParseMultiSigContract` Signed-off-by: Evgeniy Stratonikov --- pkg/vm/fuzz_test.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/pkg/vm/fuzz_test.go b/pkg/vm/fuzz_test.go index 93c789e1a..da03fea54 100644 --- a/pkg/vm/fuzz_test.go +++ b/pkg/vm/fuzz_test.go @@ -5,6 +5,8 @@ package vm import ( "testing" + "github.com/nspcc-dev/neo-go/pkg/crypto/keys" + "github.com/nspcc-dev/neo-go/pkg/smartcontract" "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/stretchr/testify/require" ) @@ -35,6 +37,35 @@ func FuzzIsScriptCorrect(f *testing.F) { }) } +func FuzzParseMultiSigContract(f *testing.F) { + pubs := make(keys.PublicKeys, 10) + for i := range pubs { + p, _ := keys.NewPrivateKey() + pubs[i] = p.PublicKey() + } + + s, _ := smartcontract.CreateMultiSigRedeemScript(1, pubs[:1]) + f.Add(s) + + s, _ = smartcontract.CreateMultiSigRedeemScript(3, pubs[:6]) + f.Add(s) + + s, _ = smartcontract.CreateMultiSigRedeemScript(1, pubs) + f.Add(s) + + f.Fuzz(func(t *testing.T, script []byte) { + var b [][]byte + var ok bool + var n int + require.NotPanics(t, func() { + n, b, ok = ParseMultiSigContract(script) + }) + if ok { + require.True(t, n <= len(b)) + } + }) +} + func FuzzVMDontPanic(f *testing.F) { for _, s := range fuzzSeedValidScripts { f.Add(s)