From 8a4260275accc0e7660c36c16662c960c3e07155 Mon Sep 17 00:00:00 2001 From: Travis Bischel Date: Fri, 19 Feb 2021 18:49:23 -0700 Subject: [PATCH] kversion: fix overflow panic for SetMaxKeyVersion --- pkg/kversion/kversion.go | 2 +- pkg/kversion/kversion_test.go | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pkg/kversion/kversion.go b/pkg/kversion/kversion.go index 3b629367..10b09eca 100644 --- a/pkg/kversion/kversion.go +++ b/pkg/kversion/kversion.go @@ -76,7 +76,7 @@ func (vs *Versions) SetMaxKeyVersion(k, v int16) { if k < 0 || v < 0 && int(k) >= len(vs.k2v)+1 { return } - needLen := int(k + 1) + needLen := int(k) + 1 for len(vs.k2v) < needLen { vs.k2v = append(vs.k2v, -1) } diff --git a/pkg/kversion/kversion_test.go b/pkg/kversion/kversion_test.go index c3bae180..f443bf26 100644 --- a/pkg/kversion/kversion_test.go +++ b/pkg/kversion/kversion_test.go @@ -1,9 +1,22 @@ package kversion import ( + "math" "testing" ) +func TestSetMaxKeyVersion(t *testing.T) { + var vs Versions + for i := int16(0); i < math.MaxInt16; i++ { + vs.SetMaxKeyVersion(i, i) + } + for i, v := range vs.k2v { + if int16(i) != v { + t.Errorf("set incorrect: at %d got %d != exp %d", i, v, i) + } + } +} + func TestVersionGuess(t *testing.T) { // Cases where last can be empty. {