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:
Valentin Bartenev 2020-10-07 20:06:30 +03:00
parent 37390d2a3b
commit 3f513f434f
2 changed files with 15 additions and 4 deletions

View file

@ -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) {

View file

@ -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