From 99610791968a1b10dd28aa7dbf426ea3bad72aed Mon Sep 17 00:00:00 2001 From: Erik Dubbelboer Date: Wed, 11 May 2022 16:10:43 +0200 Subject: [PATCH] Fix userdata re-use after Remove See also: https://github.com/valyala/fasthttp/pull/1298 --- userdata.go | 2 +- userdata_test.go | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/userdata.go b/userdata.go index 9a7c98835c..37f7d9b1f9 100644 --- a/userdata.go +++ b/userdata.go @@ -81,7 +81,7 @@ func (d *userData) Remove(key string) { kv := &args[i] if string(kv.key) == key { n-- - args[i] = args[n] + args[i], args[n] = args[n], args[i] args[n].value = nil args = args[:n] *d = args diff --git a/userdata_test.go b/userdata_test.go index c46a3e9c46..3a081aeead 100644 --- a/userdata_test.go +++ b/userdata_test.go @@ -104,3 +104,18 @@ func TestUserDataDelete(t *testing.T) { } } + +func TestUserDataSetAndRemove(t *testing.T) { + var ( + u userData + shortKey = "[]" + longKey = "[ ]" + ) + + u.Set(shortKey, "") + u.Set(longKey, "") + u.Remove(shortKey) + u.Set(shortKey, "") + testUserDataGet(t, &u, []byte(shortKey), "") + testUserDataGet(t, &u, []byte(longKey), "") +}