internal/fuzz: compute correct number of mutations

When reconstructing inputs, we miscalculated the number of mutations
that needed to be applied. If the count%chainedMutation == 0 we would
apply 0 mutations, when we should actually be applying chainedMutation
mutations, due to how count is incremented.

Fixes #49047

Change-Id: I76773bff0afd6dfd40deafc317be095da995ecc5
Reviewed-on: https://go-review.googlesource.com/c/go/+/365294
Trust: Roland Shoemaker <roland@golang.org>
Trust: Katie Hockman <katie@golang.org>
Run-TryBot: Roland Shoemaker <roland@golang.org>
Run-TryBot: Katie Hockman <katie@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Katie Hockman <katie@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
Roland Shoemaker 2021-11-18 13:30:55 -08:00
parent e8cda0a6c9
commit a94409660d
2 changed files with 2 additions and 3 deletions

View file

@ -1,5 +1,3 @@
skip # https://golang.org/issue/49047
# TODO(jayconrod): support shared memory on more platforms. # TODO(jayconrod): support shared memory on more platforms.
[!darwin] [!linux] [!windows] skip [!darwin] [!linux] [!windows] skip

View file

@ -1111,7 +1111,8 @@ func (wc *workerClient) fuzz(ctx context.Context, entryIn CorpusEntry, args fuzz
wc.m.r.restore(mem.header().randState, mem.header().randInc) wc.m.r.restore(mem.header().randState, mem.header().randInc)
if !args.Warmup { if !args.Warmup {
// Only mutate the valuesOut if fuzzing actually occurred. // Only mutate the valuesOut if fuzzing actually occurred.
for i := int64(0); i < resp.Count%chainedMutations; i++ { numMutations := ((resp.Count - 1) % chainedMutations) + 1
for i := int64(0); i < numMutations; i++ {
wc.m.mutate(valuesOut, cap(mem.valueRef())) wc.m.mutate(valuesOut, cap(mem.valueRef()))
} }
} }