From 335cf4f4fda02dfadd5bb2d334a88fc2823f248e Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Tue, 23 Apr 2019 18:59:49 +0300 Subject: 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. --- prog/rand.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'prog') 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))] } -- cgit mrf-deployment