prog: fix crash in createResource

We may be in createResource but have no resources at all because of ANYRES
that are not in target.Resources.
This is actually the case for some test targets. We have resources there,
but syscalls that create them are disabled.
In such case we crash in Intn(0).
Check that we have some resources before calling Intn.
This commit is contained in:
Dmitry Vyukov 2019-04-23 18:59:49 +03:00
parent 51fc038380
commit 335cf4f4fd

View File

@ -265,7 +265,8 @@ func (r *randGen) createResource(s *state, res *ResourceType) (arg Arg, calls []
defer func() { r.inCreateResource = false }()
kind := res.Desc.Name
if r.oneOf(1000) {
// We may have no resources, but still be in createResource due to ANYRES.
if len(r.target.resourceMap) != 0 && r.oneOf(1000) {
// Spoof resource subkind.
var all []string
for kind1 := range r.target.resourceMap {
@ -273,6 +274,10 @@ func (r *randGen) createResource(s *state, res *ResourceType) (arg Arg, calls []
all = append(all, kind1)
}
}
if len(all) == 0 {
panic(fmt.Sprintf("got no spoof resources for %v in %v/%v",
kind, r.target.OS, r.target.Arch))
}
sort.Strings(all)
kind = all[r.Intn(len(all))]
}