From 60774c5a49abc7397aca36d51d30a211b586cba1 Mon Sep 17 00:00:00 2001 From: Timothy Ebiuwhe Date: Fri, 9 Feb 2018 22:27:20 +0100 Subject: [PATCH] Fixed bug that occurs on calling @app.route or any of it's variants causes a route to be added twice. One without the slash, the other with the Setting strict_slashes to false when a route does not end with slashes slash. This is ok if the Router._add method runs linearly, but problematic when it runs recursively. Unfortunately recursion is triggered when the host param to the Router._add function is a list of hosts. --- sanic/router.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sanic/router.py b/sanic/router.py index 052ff1bf..8b3fd3dc 100644 --- a/sanic/router.py +++ b/sanic/router.py @@ -128,6 +128,13 @@ class Router: if strict_slashes: return + if not isinstance(host, str) and host is not None: + # we have gotten back to the top of the recursion tree where the + # host was originally a list. By now, we've processed the strict + # slashes logic on the leaf nodes (the individual host strings in + # the list of host) + return + # Add versions with and without trailing / slashed_methods = self.routes_all.get(uri + '/', frozenset({})) unslashed_methods = self.routes_all.get(uri[:-1], frozenset({}))