I can confirm this is a bug. Steps to recreate: 1) Unzip a copy of web2py_src_2.2.1.zip into a fresh directory
2) Start web2py e.g. cd web2py; python web2py.py -a test 3) Use the appadmin interface to create a new simple app e.g. myapp 4) Create a routes.py file containing routers = dict( BASE = dict( default_application = 'myapp', ), ) 5) In a browser (I used Chrome) visit the invalid url "http://localhost:8000/myapp/default/aaaaaaaaaa/Abbbbbbbb%20Lccc%20-%20Pddddddd%20GA%20Deeeeee%20(ffff%20ffff%20A).pdf" Result is python is now in a tight processor loop. --