This is an automated email from the ASF dual-hosted git repository. brondsem pushed a commit to branch db/8361 in repository https://gitbox.apache.org/repos/asf/allura.git
commit 7a9105201b131c6c57fd39c41755719348d4093b Author: Dave Brondsema <d...@brondsema.net> AuthorDate: Fri May 8 17:19:48 2020 -0400 [#8361] only strings for dispatch paths --- Allura/allura/controllers/rest.py | 6 +++++- Allura/allura/tests/functional/test_root.py | 7 +++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Allura/allura/controllers/rest.py b/Allura/allura/controllers/rest.py index a243f62..ee6548e 100644 --- a/Allura/allura/controllers/rest.py +++ b/Allura/allura/controllers/rest.py @@ -309,6 +309,10 @@ def nbhd_lookup_first_path(nbhd, name, current_user, remainder, api=False): prefix = nbhd.shortname_prefix pname = unquote(name) pname = six.ensure_text(pname) # we don't support unicode names, but in case a url comes in with one + try: + pname.encode('ascii') + except UnicodeError: + raise exc.HTTPNotFound provider = plugin.ProjectRegistrationProvider.get() try: provider.shortname_validator.to_python(pname, check_allowed=False, neighborhood=nbhd) @@ -324,7 +328,7 @@ def nbhd_lookup_first_path(nbhd, name, current_user, remainder, api=False): if project is None: # look for neighborhood tools matching the URL project = nbhd.neighborhood_project - return project, (pname.encode('utf-8'),) + remainder # include pname in new remainder, it is actually the nbhd tool path + return project, (pname,) + remainder # include pname in new remainder, it is actually the nbhd tool path if project and prefix == 'u/': # make sure user-projects are associated with an enabled user user = project.user_project_of diff --git a/Allura/allura/tests/functional/test_root.py b/Allura/allura/tests/functional/test_root.py index 014c093..a9cecb0 100644 --- a/Allura/allura/tests/functional/test_root.py +++ b/Allura/allura/tests/functional/test_root.py @@ -31,6 +31,8 @@ Please read http://pythonpaste.org/webtest/ for more information. from __future__ import unicode_literals from __future__ import absolute_import import os + +import six from six.moves.urllib.parse import quote from tg import tmpl_context as c @@ -103,8 +105,9 @@ class TestRootController(TestController): self.app.get('/', headers=dict(Accept=str(hdr)), validate_skip=True) def test_encoded_urls(self): - # not valid unicode - self.app.get(b'/foo\xFF', status=400) + if six.PY2: + # not valid unicode + self.app.get(b'/foo\xFF', status=400) self.app.get('/foo%FF', status=400) # encoded self.app.get('/foo%C3%A9', status=404)