Merge pull request #61 from foomo/fix/unnecessary-url-unescape

fix: remove unnecessary url unescape
This commit is contained in:
Kevin Franklin Kim 2025-05-26 16:28:29 +02:00 committed by GitHub
commit 0a45237051
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 16 deletions

View File

@ -34,23 +34,19 @@ func Decode(values url.Values, target any) error {
for key, value := range values { for key, value := range values {
// handle maps // handle maps
if ok, err := DecodeMapValue(key, value, data); err != nil { if ok, err := DecodeMapValue(key, value, data); err != nil {
return err return errors.Wrap(err, "failed to decode map value")
} else if ok { } else if ok {
continue continue
} }
// handle slices // handle slices
if ok, err := DecodeRegexValue(key, value, RegexProduct, data, ParameterItem); err != nil { 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 { } else if ok {
continue continue
} }
// default // default
// v, err := url.QueryUnescape(value[0])
// if err != nil {
// return errors.Wrap(err, "failed to unescape query parameter")
// }
data[key] = value[0] data[key] = value[0]
} }
@ -77,12 +73,13 @@ func DecodeMapValue(k string, v []string, data Data) (bool, error) {
if _, ok := data[parts[0]]; !ok { if _, ok := data[parts[0]]; !ok {
data[parts[0]] = map[string]any{} data[parts[0]] = map[string]any{}
} }
if value, ok := data[parts[0]].(map[string]any); ok { if value, ok := data[parts[0]].(map[string]any); ok && len(v) > 0 {
v, err := url.QueryUnescape(v[0]) val := v[0]
if err != nil { // gracefully try to unescape value
return false, err if out, err := url.QueryUnescape(val); err == nil {
val = out
} }
value[strings.Join(parts[1:], ".")] = v value[strings.Join(parts[1:], ".")] = val
} }
return true, nil return true, nil
} }
@ -116,11 +113,12 @@ func DecodeObjectValue(s string) (map[string]any, error) {
} }
ret := map[string]any{} ret := map[string]any{}
for _, part := range strings.Split(s, "~") { for _, part := range strings.Split(s, "~") {
v, err := url.QueryUnescape(part[2:]) val := part[2:]
if err != nil { // gracefully try to unescape value
return nil, err if out, err := url.QueryUnescape(val); err == nil {
val = out
} }
ret[part[0:2]] = v ret[part[0:2]] = val
} }
return ret, nil return ret, nil
} }

View File

@ -29,7 +29,6 @@ func TestEncode(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
// x, err := url.QueryUnescape(tt.args)
values, err := url.ParseQuery(tt.args) values, err := url.ParseQuery(tt.args)
require.NoError(t, err) require.NoError(t, err)
var event gtag.Payload var event gtag.Payload