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:
Zhidao HONG
2021-08-02 12:30:38 +08:00
parent db03dfad67
commit d16cf04167
3 changed files with 27 additions and 0 deletions

View File

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

View File

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

View File

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