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:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user