Skip to content

Commit a2aa20d

Browse files
committed
validate route name
1 parent db29231 commit a2aa20d

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

aiohttp/web_urldispatcher.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import abc
22
import asyncio
33

4+
import keyword
45
import collections
56
import mimetypes
67
import re
@@ -442,8 +443,12 @@ def register_route(self, route):
442443
assert isinstance(route, Route), 'Instance of Route class is required.'
443444

444445
name = route.name
446+
445447
if name is not None:
446-
if name in self._routes:
448+
if not name.isidentifier() or keyword.iskeyword(name):
449+
raise ValueError('Incorrect route name value, '
450+
'Route name should be python identifier')
451+
elif name in self._routes:
447452
raise ValueError('Duplicate {!r}, '
448453
'already handled by {!r}'
449454
.format(name, self._routes[name]))

tests/test_urldispatch.py

+6
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ def test_register_route_checks(self):
7777
self.router.register_route(route)
7878
self.assertRaises(ValueError, self.router.register_route, route)
7979

80+
route = PlainRoute('GET', handler, '1bad name', '/handler/to/path')
81+
self.assertRaises(ValueError, self.router.register_route, route)
82+
83+
route = PlainRoute('GET', handler, 'return', '/handler/to/path')
84+
self.assertRaises(ValueError, self.router.register_route, route)
85+
8086
def test_add_route_root(self):
8187
handler = self.make_handler()
8288
self.router.add_route('GET', '/', handler)

0 commit comments

Comments
 (0)