diff options
Diffstat (limited to '')
-rw-r--r-- | docs/changes.xml | 7 | ||||
-rw-r--r-- | src/nxt_http_route.c | 5 | ||||
-rw-r--r-- | test/test_routing.py | 4 |
3 files changed, 16 insertions, 0 deletions
diff --git a/docs/changes.xml b/docs/changes.xml index 63c52633..e183f907 100644 --- a/docs/changes.xml +++ b/docs/changes.xml @@ -99,6 +99,13 @@ or "upstreams" using a variable "pass" option. </para> </change> +<change type="bugfix"> +<para> +the router process crashed while matching a request to an empty array of +source or destination address patterns. +</para> +</change> + </changes> diff --git a/src/nxt_http_route.c b/src/nxt_http_route.c index 065b3488..b330796f 100644 --- a/src/nxt_http_route.c +++ b/src/nxt_http_route.c @@ -1936,6 +1936,11 @@ nxt_http_route_addr_rule(nxt_http_request_t *r, nxt_http_route_addr_pattern_t *p; n = addr_rule->items; + + if (n == 0) { + return 0; + } + p = &addr_rule->addr_pattern[0] - 1; do { diff --git a/test/test_routing.py b/test/test_routing.py index eaa0a134..ef5622c2 100644 --- a/test/test_routing.py +++ b/test/test_routing.py @@ -1751,6 +1751,10 @@ class TestRouting(TestApplicationProto): self.route_match_invalid({"source": "*:1-a"}) self.route_match_invalid({"source": "*:65536"}) + def test_routes_match_source_none(self): + self.route_match({"source": []}) + assert self.get()['status'] == 404, 'source none' + def test_routes_match_destination(self): assert 'success' in self.conf( {"*:7080": {"pass": "routes"}, "*:7081": {"pass": "routes"}}, |