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;
|
nxt_http_route_t **route, **end;
|
||||||
|
|
||||||
|
if (routes == NULL) {
|
||||||
|
return NXT_DECLINED;
|
||||||
|
}
|
||||||
|
|
||||||
route = &routes->route[0];
|
route = &routes->route[0];
|
||||||
end = route + routes->items;
|
end = route + routes->items;
|
||||||
|
|
||||||
|
|||||||
@@ -78,6 +78,10 @@ nxt_upstream_find(nxt_upstreams_t *upstreams, nxt_str_t *name,
|
|||||||
uint32_t i, n;
|
uint32_t i, n;
|
||||||
nxt_upstream_t *upstream;
|
nxt_upstream_t *upstream;
|
||||||
|
|
||||||
|
if (upstreams == NULL) {
|
||||||
|
return NXT_DECLINED;
|
||||||
|
}
|
||||||
|
|
||||||
upstream = &upstreams->upstream[0];
|
upstream = &upstreams->upstream[0];
|
||||||
n = upstreams->items;
|
n = upstreams->items;
|
||||||
|
|
||||||
|
|||||||
@@ -100,6 +100,25 @@ class TestVariables(TestApplicationProto):
|
|||||||
assert self.get(url='/1')['status'] == 200
|
assert self.get(url='/1')['status'] == 200
|
||||||
assert self.get(url='/2')['status'] == 404
|
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 test_variables_invalid(self):
|
||||||
def check_variables(routes):
|
def check_variables(routes):
|
||||||
assert 'error' in self.conf(
|
assert 'error' in self.conf(
|
||||||
|
|||||||
Reference in New Issue
Block a user