From f3679167ff296893dd5bcb962b83db135a9311e6 Mon Sep 17 00:00:00 2001 From: Clark Winters <40615752+cwinters8@users.noreply.github.com> Date: Thu, 1 Dec 2022 02:18:23 -0600 Subject: [PATCH] =?UTF-8?q?=F0=9F=A9=B9=20Fix:=20Unintended=20overwritten?= =?UTF-8?q?=20bind=20variables=20(#2240)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * bindMap key value should only be set when not already present * add comment Co-authored-by: Clark Winters --- ctx.go | 5 ++++- ctx_test.go | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/ctx.go b/ctx.go index e07ce30da6..92d7fad985 100644 --- a/ctx.go +++ b/ctx.go @@ -1437,7 +1437,10 @@ func (c *Ctx) renderExtensions(bind interface{}) { // Bind view map if c.viewBindMap != nil { for _, v := range c.viewBindMap.D { - bindMap[v.Key] = v.Value + // make sure key does not exist already + if _, ok := bindMap[v.Key]; !ok { + bindMap[v.Key] = v.Value + } } } diff --git a/ctx_test.go b/ctx_test.go index 0d20898065..c2b2c2d9e6 100644 --- a/ctx_test.go +++ b/ctx_test.go @@ -2851,6 +2851,29 @@ func Test_Ctx_RenderWithBind(t *testing.T) { } +func Test_Ctx_RenderWithOverwrittenBind(t *testing.T) { + t.Parallel() + + app := New() + c := app.AcquireCtx(&fasthttp.RequestCtx{}) + + err := c.Bind(Map{ + "Title": "Hello, World!", + }) + utils.AssertEqual(t, nil, err) + defer app.ReleaseCtx(c) + err = c.Render("./.github/testdata/index.tmpl", Map{ + "Title": "Hello from Fiber!", + }) + + buf := bytebufferpool.Get() + _, _ = buf.WriteString("overwrite") + defer bytebufferpool.Put(buf) + + utils.AssertEqual(t, nil, err) + utils.AssertEqual(t, "

Hello from Fiber!

", string(c.Response().Body())) +} + func Test_Ctx_RenderWithBindLocals(t *testing.T) { t.Parallel()