From ee42876f958cee5e90c650618fe994307a260397 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Thu, 30 Aug 2018 06:58:05 -0700 Subject: prog: fix corner case in normalizePrio Based on twitter bug report: https://twitter.com/panicaII/status/1035058001269248000 --- prog/prio.go | 3 +++ prog/prio_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 prog/prio_test.go diff --git a/prog/prio.go b/prog/prio.go index 0e726f702..95713392e 100644 --- a/prog/prio.go +++ b/prog/prio.go @@ -175,6 +175,9 @@ func normalizePrio(prios [][]float32) { if nzero != 0 { min /= 2 * float32(nzero) } + if min == max { + max = 0 + } for i, p := range prio { if max == 0 { prio[i] = 1 diff --git a/prog/prio_test.go b/prog/prio_test.go new file mode 100644 index 000000000..06a72f75b --- /dev/null +++ b/prog/prio_test.go @@ -0,0 +1,28 @@ +// Copyright 2018 syzkaller project authors. All rights reserved. +// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. + +package prog + +import ( + "reflect" + "testing" +) + +func TestNormalizePrio(t *testing.T) { + prios := [][]float32{ + {2, 2, 2}, + {1, 2, 4}, + {1, 2, 0}, + } + want := [][]float32{ + {1, 1, 1}, + {0.1, 0.4, 1}, + {0.4, 1, 0.1}, + } + t.Logf("had: %+v", prios) + normalizePrio(prios) + if !reflect.DeepEqual(prios, want) { + t.Logf("got: %+v", prios) + t.Errorf("want: %+v", want) + } +} -- cgit mrf-deployment