summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/labstack/echo/v4/router.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/labstack/echo/v4/router.go')
-rw-r--r--vendor/github.com/labstack/echo/v4/router.go9
1 files changed, 7 insertions, 2 deletions
diff --git a/vendor/github.com/labstack/echo/v4/router.go b/vendor/github.com/labstack/echo/v4/router.go
index 597660d3..ee6f3fa4 100644
--- a/vendor/github.com/labstack/echo/v4/router.go
+++ b/vendor/github.com/labstack/echo/v4/router.go
@@ -151,7 +151,7 @@ func (r *Router) Routes() []*Route {
return routes
}
-// Reverse generates an URL from route name and provided parameters.
+// Reverse generates a URL from route name and provided parameters.
func (r *Router) Reverse(name string, params ...interface{}) string {
uri := new(bytes.Buffer)
ln := len(params)
@@ -159,7 +159,12 @@ func (r *Router) Reverse(name string, params ...interface{}) string {
for _, route := range r.routes {
if route.Name == name {
for i, l := 0, len(route.Path); i < l; i++ {
- if (route.Path[i] == ':' || route.Path[i] == '*') && n < ln {
+ hasBackslash := route.Path[i] == '\\'
+ if hasBackslash && i+1 < l && route.Path[i+1] == ':' {
+ i++ // backslash before colon escapes that colon. in that case skip backslash
+ }
+ if n < ln && (route.Path[i] == '*' || (!hasBackslash && route.Path[i] == ':')) {
+ // in case of `*` wildcard or `:` (unescaped colon) param we replace everything till next slash or end of path
for ; i < l && route.Path[i] != '/'; i++ {
}
uri.WriteString(fmt.Sprintf("%v", params[n]))