Fixed incorrect path traversal
This commit is contained in:
parent
20945fb424
commit
63655425af
@ -45,6 +45,7 @@ data := router.LookupNoAlloc("GET", "/users/42", func(key string, value string)
|
||||
```
|
||||
PASS: TestStatic
|
||||
PASS: TestParameter
|
||||
PASS: TestMixed
|
||||
PASS: TestWildcard
|
||||
PASS: TestMap
|
||||
PASS: TestMethods
|
||||
|
@ -72,9 +72,35 @@ func TestParameter(t *testing.T) {
|
||||
assert.Equal(t, data, "Comment")
|
||||
}
|
||||
|
||||
func TestMixed(t *testing.T) {
|
||||
r := router.New[string]()
|
||||
r.Add("GET", "/", "Frontpage")
|
||||
r.Add("GET", "/blog", "Blog")
|
||||
r.Add("GET", "/:post", "Post")
|
||||
r.Add("GET", "/sitemap.txt", "Sitemap")
|
||||
|
||||
data, params := r.Lookup("GET", "/")
|
||||
assert.Equal(t, len(params), 0)
|
||||
assert.Equal(t, data, "Frontpage")
|
||||
|
||||
data, params = r.Lookup("GET", "/blog")
|
||||
assert.Equal(t, len(params), 0)
|
||||
assert.Equal(t, data, "Blog")
|
||||
|
||||
data, params = r.Lookup("GET", "/software")
|
||||
assert.Equal(t, len(params), 1)
|
||||
assert.Equal(t, params[0].Key, "post")
|
||||
assert.Equal(t, params[0].Value, "software")
|
||||
assert.Equal(t, data, "Post")
|
||||
|
||||
data, params = r.Lookup("GET", "/sitemap.txt")
|
||||
assert.Equal(t, len(params), 0)
|
||||
assert.Equal(t, data, "Sitemap")
|
||||
}
|
||||
|
||||
func TestWildcard(t *testing.T) {
|
||||
r := router.New[string]()
|
||||
r.Add("GET", "/", "Front page")
|
||||
r.Add("GET", "/", "Frontpage")
|
||||
r.Add("GET", "/users/:id", "Parameter")
|
||||
r.Add("GET", "/images/static", "Static")
|
||||
r.Add("GET", "/images/*path", "Wildcard")
|
||||
@ -84,7 +110,7 @@ func TestWildcard(t *testing.T) {
|
||||
|
||||
data, params := r.Lookup("GET", "/")
|
||||
assert.Equal(t, len(params), 0)
|
||||
assert.Equal(t, data, "Front page")
|
||||
assert.Equal(t, data, "Frontpage")
|
||||
|
||||
data, params = r.Lookup("GET", "/blog-post")
|
||||
assert.Equal(t, len(params), 1)
|
||||
|
9
Tree.go
9
Tree.go
@ -93,7 +93,9 @@ func (tree *Tree[T]) Lookup(path string) (T, []Parameter) {
|
||||
func (tree *Tree[T]) LookupNoAlloc(path string, addParameter func(key string, value string)) T {
|
||||
var (
|
||||
i uint
|
||||
parameterPath string
|
||||
wildcardPath string
|
||||
parameter *treeNode[T]
|
||||
wildcard *treeNode[T]
|
||||
node = &tree.root
|
||||
)
|
||||
@ -115,6 +117,8 @@ begin:
|
||||
wildcardPath = path[i:]
|
||||
}
|
||||
|
||||
parameter = node.parameter
|
||||
parameterPath = path[i:]
|
||||
char := path[i]
|
||||
|
||||
if char >= node.startIndex && char < node.endIndex {
|
||||
@ -178,6 +182,11 @@ begin:
|
||||
// node: /|*any
|
||||
// path: /|image.png
|
||||
notFound:
|
||||
if parameter != nil {
|
||||
addParameter(parameter.prefix, parameterPath)
|
||||
return parameter.data
|
||||
}
|
||||
|
||||
if wildcard != nil {
|
||||
addParameter(wildcard.prefix, wildcardPath)
|
||||
return wildcard.data
|
||||
|
Loading…
x
Reference in New Issue
Block a user