-
-
Notifications
You must be signed in to change notification settings - Fork 989
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
URLParam sometimes returns URL-encoded variables #832
Comments
+1. I'm hitting this same issue too. The logic seems inconsistent.
This URL
extracts contentId as
But this URL
extracts contentId as
|
We hit this bug. Because the data only sometimes needs unescaping depending on whatever inside go sets the func SafeURLParam(r *http.Request, key string) string {
rctx := chi.RouteContext(r.Context())
if rctx == nil {
return ""
}
raw := rctx.URLParam(key)
// Only apply unescaping if chi built the param map using the raw path.
// Corresponds to the logic at
// https://github.com/go-chi/chi/blob/v5.1.0/mux.go#L433-L437
if r.URL.RawPath == "" {
return raw
}
unescaped, err := url.PathUnescape(raw)
if err != nil {
slog.Warn("bad URL escape", "error", err, "param", raw)
return ""
}
return unescaped
} |
same as issue 641 and issue 642 right? still no fix after 3 years? yeah i know ... i should submit a PR - well i just switched to using query params instead. |
Hello!
As the title says, when I try to get a URL parameter from a
http.Request
object (callingchi.URLParam
), it sometimes returns a URL-encoded result, and it only depends on whetherr.URL.RawPath
is set or not.This is because in function
*Mux.routeHTTP()
, it checks ifr.URL.RawPath
is set and uses it instead ofr.URL.Path
; however,r.URL.RawPath
is only present sometimes:chi/mux.go
Lines 420 to 431 in 7f28096
IMHO, the best course of action will be to use
url.EscapedPath()
to get theroutePath
and thenurl.PathUnescape()
to set every value.Simple program to show the bug:
Simple execution to see the problem:
If it is OK for you, I will open a Pull Request.
Thank you very much,
Juan
The text was updated successfully, but these errors were encountered: