From f8a36b73ff4eea423af248bca9a3b2ec3d23eb97 Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Mon, 26 May 2025 16:06:28 +0200 Subject: [PATCH 1/3] fix: remove unnecessary url unescape --- pkg/encoding/gtag/decode.go | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/pkg/encoding/gtag/decode.go b/pkg/encoding/gtag/decode.go index 0485aa3..c159835 100644 --- a/pkg/encoding/gtag/decode.go +++ b/pkg/encoding/gtag/decode.go @@ -34,14 +34,14 @@ func Decode(values url.Values, target any) error { for key, value := range values { // handle maps if ok, err := DecodeMapValue(key, value, data); err != nil { - return err + return errors.Wrap(err, "failed to decode map value") } else if ok { continue } // handle slices if ok, err := DecodeRegexValue(key, value, RegexProduct, data, ParameterItem); err != nil { - return err + return errors.Wrap(err, "failed to decode regex value") } else if ok { continue } @@ -77,12 +77,8 @@ func DecodeMapValue(k string, v []string, data Data) (bool, error) { if _, ok := data[parts[0]]; !ok { data[parts[0]] = map[string]any{} } - if value, ok := data[parts[0]].(map[string]any); ok { - v, err := url.QueryUnescape(v[0]) - if err != nil { - return false, err - } - value[strings.Join(parts[1:], ".")] = v + if value, ok := data[parts[0]].(map[string]any); ok && len(v) > 0 { + value[strings.Join(parts[1:], ".")] = v[0] } return true, nil } @@ -116,11 +112,7 @@ func DecodeObjectValue(s string) (map[string]any, error) { } ret := map[string]any{} for _, part := range strings.Split(s, "~") { - v, err := url.QueryUnescape(part[2:]) - if err != nil { - return nil, err - } - ret[part[0:2]] = v + ret[part[0:2]] = part[2:] } return ret, nil } From 7884aecdae731d58597bbc5c41c2d830577b2c5d Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Mon, 26 May 2025 16:08:23 +0200 Subject: [PATCH 2/3] style: remove comment --- pkg/encoding/gtag/decode.go | 4 ---- pkg/encoding/gtag/encode_test.go | 1 - 2 files changed, 5 deletions(-) diff --git a/pkg/encoding/gtag/decode.go b/pkg/encoding/gtag/decode.go index c159835..ae715a0 100644 --- a/pkg/encoding/gtag/decode.go +++ b/pkg/encoding/gtag/decode.go @@ -47,10 +47,6 @@ func Decode(values url.Values, target any) error { } // default - // v, err := url.QueryUnescape(value[0]) - // if err != nil { - // return errors.Wrap(err, "failed to unescape query parameter") - // } data[key] = value[0] } diff --git a/pkg/encoding/gtag/encode_test.go b/pkg/encoding/gtag/encode_test.go index 6e90412..5dc6a82 100644 --- a/pkg/encoding/gtag/encode_test.go +++ b/pkg/encoding/gtag/encode_test.go @@ -29,7 +29,6 @@ func TestEncode(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - // x, err := url.QueryUnescape(tt.args) values, err := url.ParseQuery(tt.args) require.NoError(t, err) var event gtag.Payload From 3af21626d860299958587415b80220014f5be092 Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Mon, 26 May 2025 16:19:08 +0200 Subject: [PATCH 3/3] revert: gracefully try unescape --- pkg/encoding/gtag/decode.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pkg/encoding/gtag/decode.go b/pkg/encoding/gtag/decode.go index ae715a0..47a622d 100644 --- a/pkg/encoding/gtag/decode.go +++ b/pkg/encoding/gtag/decode.go @@ -74,7 +74,12 @@ func DecodeMapValue(k string, v []string, data Data) (bool, error) { data[parts[0]] = map[string]any{} } if value, ok := data[parts[0]].(map[string]any); ok && len(v) > 0 { - value[strings.Join(parts[1:], ".")] = v[0] + val := v[0] + // gracefully try to unescape value + if out, err := url.QueryUnescape(val); err == nil { + val = out + } + value[strings.Join(parts[1:], ".")] = val } return true, nil } @@ -108,7 +113,12 @@ func DecodeObjectValue(s string) (map[string]any, error) { } ret := map[string]any{} for _, part := range strings.Split(s, "~") { - ret[part[0:2]] = part[2:] + val := part[2:] + // gracefully try to unescape value + if out, err := url.QueryUnescape(val); err == nil { + val = out + } + ret[part[0:2]] = val } return ret, nil }