Skip to content

Commit ca5509a

Browse files
authored
fix: change WithDetail to deep copy details map (#140)
1 parent 49e6804 commit ca5509a

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

error_default.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
stderr "errors"
88
"fmt"
99
"io"
10+
"maps"
1011
"net/http"
1112

1213
"github.com/pkg/errors"
@@ -289,6 +290,8 @@ func (e DefaultError) WithDebug(debug string) *DefaultError {
289290
func (e DefaultError) WithDetail(key string, detail interface{}) *DefaultError {
290291
if e.DetailsField == nil {
291292
e.DetailsField = map[string]interface{}{}
293+
} else {
294+
e.DetailsField = maps.Clone(e.DetailsField)
292295
}
293296
e.DetailsField[key] = detail
294297
return &e
@@ -297,6 +300,8 @@ func (e DefaultError) WithDetail(key string, detail interface{}) *DefaultError {
297300
func (e DefaultError) WithDetailf(key string, message string, args ...interface{}) *DefaultError {
298301
if e.DetailsField == nil {
299302
e.DetailsField = map[string]interface{}{}
303+
} else {
304+
e.DetailsField = maps.Clone(e.DetailsField)
300305
}
301306
e.DetailsField[key] = fmt.Sprintf(message, args...)
302307
return &e

error_default_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,15 @@ func TestToDefaultError(t *testing.T) {
6767
assert.EqualValues(t, map[string]interface{}{"foo-debug": "bar"}, ToDefaultError(e, "").Details())
6868
})
6969

70+
t.Run("case=details copies map", func(t *testing.T) {
71+
eBar := DefaultError{}.WithDetail("foo", "bar")
72+
eBaz := eBar.WithDetail("foo", "baz")
73+
eBazBar := eBaz.WithDetailf("bar", "baz%s", "bar")
74+
assert.EqualValues(t, map[string]interface{}{"foo": "bar"}, ToDefaultError(eBar, "").Details())
75+
assert.EqualValues(t, map[string]interface{}{"foo": "baz"}, ToDefaultError(eBaz, "").Details())
76+
assert.EqualValues(t, map[string]interface{}{"foo": "baz", "bar": "bazbar"}, ToDefaultError(eBazBar, "").Details())
77+
})
78+
7079
t.Run("case=rid", func(t *testing.T) {
7180
e := &DefaultError{
7281
RIDField: "foo-rid",

0 commit comments

Comments
 (0)