Router: fixed segmentation fault.
In the case that routes or upstreams is empty and the pass option is a variable. If the resolved pass is routes or upstreams, a segment error occurred.
This commit is contained in:
@@ -1567,6 +1567,10 @@ nxt_http_route_find(nxt_http_routes_t *routes, nxt_str_t *name,
|
||||
{
|
||||
nxt_http_route_t **route, **end;
|
||||
|
||||
if (routes == NULL) {
|
||||
return NXT_DECLINED;
|
||||
}
|
||||
|
||||
route = &routes->route[0];
|
||||
end = route + routes->items;
|
||||
|
||||
|
||||
@@ -78,6 +78,10 @@ nxt_upstream_find(nxt_upstreams_t *upstreams, nxt_str_t *name,
|
||||
uint32_t i, n;
|
||||
nxt_upstream_t *upstream;
|
||||
|
||||
if (upstreams == NULL) {
|
||||
return NXT_DECLINED;
|
||||
}
|
||||
|
||||
upstream = &upstreams->upstream[0];
|
||||
n = upstreams->items;
|
||||
|
||||
|
||||
@@ -100,6 +100,25 @@ class TestVariables(TestApplicationProto):
|
||||
assert self.get(url='/1')['status'] == 200
|
||||
assert self.get(url='/2')['status'] == 404
|
||||
|
||||
def test_variables_empty(self):
|
||||
def update_pass(prefix):
|
||||
assert 'success' in self.conf(
|
||||
{
|
||||
"listeners": {
|
||||
"*:7080": {"pass": prefix + "/$method"},
|
||||
},
|
||||
},
|
||||
), 'variables empty'
|
||||
|
||||
update_pass("routes");
|
||||
assert self.get(url='/1')['status'] == 404
|
||||
|
||||
update_pass("upstreams");
|
||||
assert self.get(url='/2')['status'] == 404
|
||||
|
||||
update_pass("applications");
|
||||
assert self.get(url='/3')['status'] == 404
|
||||
|
||||
def test_variables_invalid(self):
|
||||
def check_variables(routes):
|
||||
assert 'error' in self.conf(
|
||||
|
||||
Reference in New Issue
Block a user