aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2019-03-05 16:12:34 +0100
committerDmitry Vyukov <dvyukov@google.com>2019-03-05 16:14:27 +0100
commit78b7ec0fbe23a5c674401123053d6372ea3ca9c6 (patch)
treecfa94ed246a9ce20ac370c18f1f64c4f40f82838
parenteb9e33b10f006149447e555a6afe12e2d6afc4f9 (diff)
pkg/compiler: fix infinite recursion on unions
Found by go-fuzz on fuzzbuzz.
-rw-r--r--pkg/compiler/compiler_test.go5
-rw-r--r--pkg/compiler/types.go2
2 files changed, 5 insertions, 2 deletions
diff --git a/pkg/compiler/compiler_test.go b/pkg/compiler/compiler_test.go
index 27974f78c..274e2f1cd 100644
--- a/pkg/compiler/compiler_test.go
+++ b/pkg/compiler/compiler_test.go
@@ -194,8 +194,11 @@ func TestFuzz(t *testing.T) {
"da[",
"define\x98define(define\x98define\x98define\x98define\x98define)define\tdefin",
"resource g[g]",
+ `t[
+l t
+]`,
}
- consts := map[string]uint64{"A": 1, "B": 2, "C": 3, "SYS_C": 4}
+ consts := map[string]uint64{"A": 1, "B": 2, "C": 3, "SYS_A": 4, "SYS_B": 5, "SYS_C": 6}
eh := func(pos ast.Pos, msg string) {
t.Logf("%v: %v", pos, msg)
}
diff --git a/pkg/compiler/types.go b/pkg/compiler/types.go
index 30ff8884a..8b10e2717 100644
--- a/pkg/compiler/types.go
+++ b/pkg/compiler/types.go
@@ -702,7 +702,7 @@ func init() {
canBeArg := true
for _, fld := range s.Fields {
desc := comp.getTypeDesc(fld.Type)
- if desc == nil || desc.CanBeArgRet == nil {
+ if desc == nil || desc == typeStruct || desc.CanBeArgRet == nil {
return false, false
}
canBeArg1, _ := desc.CanBeArgRet(comp, fld.Type)