Skip to content

Commit dae96b5

Browse files
committed
Enhance fuzzer more
1 parent 7ac4421 commit dae96b5

File tree

1 file changed

+36
-3
lines changed

1 file changed

+36
-3
lines changed

gnovm/pkg/transpiler/fuzz_test.go

+36-3
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,15 @@ func FuzzTranspiling(f *testing.F) {
5656
// to run, that we report this as problematic.
5757
doneCh := make(chan bool, 1)
5858
readyCh := make(chan bool)
59+
isGnoTypeCheckError := false
5960
defer func() {
6061
goRunErr := checkIfGoCompilesProgram(t, gnoSrc)
6162
r := recover()
6263
if r == nil {
6364
if goRunErr != nil {
64-
panic(fmt.Sprintf("Runs alright in Gno but fails in Go:\n%v\n%s", goRunErr, gnoSrc))
65+
if !isGnoTypeCheckError {
66+
panic(fmt.Sprintf("Runs alright in Gno but fails in Go:\n%v\n%s", goRunErr, gnoSrc))
67+
}
6568
}
6669
return
6770
}
@@ -81,6 +84,7 @@ func FuzzTranspiling(f *testing.F) {
8184
strings.Contains(sr, "not defined in fileset with"),
8285
strings.Contains(sr, "literal not terminated"),
8386
strings.Contains(sr, "illegal character"),
87+
strings.Contains(sr, "expected 1 expression"),
8488
strings.Contains(sr, "expected 'IDENT', found "),
8589
strings.Contains(sr, "expected declaration, found"),
8690
strings.Contains(sr, "expected 'package', found"),
@@ -99,15 +103,39 @@ func FuzzTranspiling(f *testing.F) {
99103
strings.Contains(sr, "required in 3-index slice"),
100104
strings.Contains(sr, "comment not terminated"),
101105
strings.Contains(sr, "missing field"),
106+
strings.Contains(sr, "expected operand, found"),
107+
strings.Contains(sr, "expected statement, found"),
108+
strings.Contains(sr, "m.NumValues <= 0"),
102109
strings.Contains(sr, "missing ',' in composite literal"),
103110
strings.Contains(sr, "no new variables on left side of"),
104111
strings.Contains(sr, "expected boolean or range expression, found assignment (missing parentheses around composite"),
105112
strings.Contains(sr, "must separate successive digits"),
106113
strings.Contains(sr, "runtime error: invalid memory address") && strings.Contains(gnoSrc, " int."),
107114
strings.Contains(sr, "expected '{', found "),
115+
strings.Contains(sr, "ast.FuncDecl has missing receiver"),
108116
strings.Contains(sr, "expected '}', found "),
117+
strings.Contains(sr, "dot imports not allowed"),
109118
strings.Contains(sr, "expected '(', found "),
110119
strings.Contains(sr, "expected ')', found "),
120+
strings.Contains(sr, "expected '[', found "),
121+
strings.Contains(sr, "expected ']', found "),
122+
strings.Contains(sr, "invalid digit"),
123+
strings.Contains(sr, "missing ',' before newline in argument list"),
124+
strings.Contains(sr, "import path must be a string"),
125+
strings.Contains(sr, "cannot indirect"),
126+
strings.Contains(sr, "invalid radix point in"),
127+
strings.Contains(sr, "invalid column number"),
128+
strings.Contains(sr, "unknown Go type *ast.IndexListExpr"),
129+
strings.Contains(sr, "expected selector or type assertion"),
130+
strings.Contains(sr, "cannot take address of"),
131+
strings.Contains(sr, "unexpected selector expression type"),
132+
strings.Contains(sr, "hexadecimal mantissa requires a 'p' exponent"),
133+
strings.Contains(sr, "invalid operation: operator"),
134+
strings.Contains(sr, "operator") && strings.Contains(sr, "not defined on"),
135+
strings.Contains(sr, "illegal rune literal"),
136+
strings.Contains(sr, "DeclaredType method named"),
137+
strings.Contains(sr, "unknown Go type *ast.GoStmt"),
138+
strings.Contains(sr, "invalid line number"),
111139
strings.Contains(sr, "missing ',' before newline in parameter list"),
112140
strings.Contains(sr, "expected ';', found "):
113141
return
@@ -154,13 +182,18 @@ func FuzzTranspiling(f *testing.F) {
154182
iavlStore := iavl.StoreConstructor(db, stypes.StoreOptions{})
155183
store := gnolang.NewStore(nil, baseStore, iavlStore)
156184
m := gnolang.NewMachine(string(fn.PkgName), store)
157-
m.RunMemPackage(&gnovm.MemPackage{
185+
memPkg := &gnovm.MemPackage{
158186
Name: string(fn.PkgName),
159187
Path: string(fn.Name),
160188
Files: []*gnovm.MemFile{
161189
{Name: "a.gno", Body: gnoSrc},
162190
},
163-
}, true)
191+
}
192+
if err := gnolang.TypeCheckMemPackage(memPkg, nil, false); err != nil {
193+
isGnoTypeCheckError = true
194+
return
195+
}
196+
m.RunMemPackage(memPkg, true)
164197
})
165198
}
166199

0 commit comments

Comments
 (0)