diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2019-04-23 18:59:49 +0300 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2019-04-23 18:59:49 +0300 |
| commit | 335cf4f4fda02dfadd5bb2d334a88fc2823f248e (patch) | |
| tree | 5d9d93a36f435ba86377116d6182af45b276cb0f /prog/rand.go | |
| parent | 51fc038380062aec71b4e39af9227c6db0be4fd8 (diff) | |
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.
Diffstat (limited to 'prog/rand.go')
| -rw-r--r-- | prog/rand.go | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/prog/rand.go b/prog/rand.go index c1ac76776..e4164b74a 100644 --- a/prog/rand.go +++ b/prog/rand.go @@ -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))] } |
