Make argsKV more predictable

Fixes #932
This commit is contained in:
Erik Dubbelboer
2020-12-26 16:53:48 +01:00
parent d0dfbd4494
commit 4e63057c0f
2 changed files with 34 additions and 2 deletions
+9 -1
View File
@@ -361,7 +361,13 @@ func visitArgs(args []argsKV, f func(k, v []byte)) {
func copyArgs(dst, src []argsKV) []argsKV {
if cap(dst) < len(src) {
tmp := make([]argsKV, len(src))
dst = dst[:cap(dst)] // copy all of dst.
copy(tmp, dst)
for i := len(dst); i < len(tmp); i++ {
// Make sure nothing is nil.
tmp[i].key = []byte{}
tmp[i].value = []byte{}
}
dst = tmp
}
n := len(src)
@@ -442,7 +448,9 @@ func allocArg(h []argsKV) ([]argsKV, *argsKV) {
if cap(h) > n {
h = h[:n+1]
} else {
h = append(h, argsKV{})
h = append(h, argsKV{
value: []byte{},
})
}
return h, &h[n]
}
+25 -1
View File
@@ -596,4 +596,28 @@ func TestArgsDeleteAll(t *testing.T) {
if a.Len() != 1 || a.Has("q1") {
t.Fatalf("Expected q1 arg to be completely deleted. Current Args: %s", a.String())
}
}
}
func TestIssue932(t *testing.T) {
t.Parallel()
var a []argsKV
a = setArg(a, "t1", "ok", argsHasValue)
a = setArg(a, "t2", "", argsHasValue)
a = setArg(a, "t1", "", argsHasValue)
a = setArgBytes(a, s2b("t3"), []byte{}, argsHasValue)
a = setArgBytes(a, s2b("t4"), nil, argsHasValue)
if peekArgStr(a, "t1") == nil {
t.Error("nil not expected for t1")
}
if peekArgStr(a, "t2") == nil {
t.Error("nil not expected for t2")
}
if peekArgStr(a, "t3") == nil {
t.Error("nil not expected for t3")
}
if peekArgStr(a, "t4") != nil {
t.Error("nil expected for t4")
}
}