Router: fixed "not empty" pattern matching.
The "!" pattern should be opposite to "", i.e. match only non-empty values. But after 3c00af54b937 it was equal to "!*", which is wrong.
This commit is contained in:
parent
37390d2a3b
commit
3f513f434f
2 changed files with 15 additions and 4 deletions
|
@ -1085,10 +1085,6 @@ nxt_http_route_pattern_create(nxt_task_t *task, nxt_mp_t *mp,
|
||||||
|
|
||||||
pattern->negative = 1;
|
pattern->negative = 1;
|
||||||
pattern->any = 0;
|
pattern->any = 0;
|
||||||
|
|
||||||
if (test.length == 0) {
|
|
||||||
return NXT_OK;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (test.length == 0) {
|
if (test.length == 0) {
|
||||||
|
|
|
@ -118,6 +118,9 @@ class TestRouting(TestApplicationProto):
|
||||||
|
|
||||||
def test_routes_match_negative(self):
|
def test_routes_match_negative(self):
|
||||||
self.route_match({"uri": "!"})
|
self.route_match({"uri": "!"})
|
||||||
|
assert self.get()['status'] == 200
|
||||||
|
|
||||||
|
self.route_match({"uri": "!*"})
|
||||||
assert self.get()['status'] == 404
|
assert self.get()['status'] == 404
|
||||||
|
|
||||||
self.route_match({"uri": "!/"})
|
self.route_match({"uri": "!/"})
|
||||||
|
@ -1187,6 +1190,18 @@ class TestRouting(TestApplicationProto):
|
||||||
assert self.get(url='/?foo=barxx&x%=%')['status'] == 404
|
assert self.get(url='/?foo=barxx&x%=%')['status'] == 404
|
||||||
|
|
||||||
def test_routes_match_arguments_negative(self):
|
def test_routes_match_arguments_negative(self):
|
||||||
|
self.route_match({"arguments": {"foo": "!"}})
|
||||||
|
assert self.get(url='/?bar')['status'] == 404
|
||||||
|
assert self.get(url='/?foo')['status'] == 404
|
||||||
|
assert self.get(url='/?foo=')['status'] == 404
|
||||||
|
assert self.get(url='/?foo=%25')['status'] == 200
|
||||||
|
|
||||||
|
self.route_match({"arguments": {"foo": "!*"}})
|
||||||
|
assert self.get(url='/?bar')['status'] == 404
|
||||||
|
assert self.get(url='/?foo')['status'] == 404
|
||||||
|
assert self.get(url='/?foo=')['status'] == 404
|
||||||
|
assert self.get(url='/?foo=blah')['status'] == 404
|
||||||
|
|
||||||
self.route_match({"arguments": {"foo": "!%25"}})
|
self.route_match({"arguments": {"foo": "!%25"}})
|
||||||
assert self.get(url='/?foo=blah')['status'] == 200
|
assert self.get(url='/?foo=blah')['status'] == 200
|
||||||
assert self.get(url='/?foo=%')['status'] == 404
|
assert self.get(url='/?foo=%')['status'] == 404
|
||||||
|
|
Loading…
Reference in a new issue