Merge pull request #188 from webtic/master

Find URL encoded filenames on the fs by decoding them first
This commit is contained in:
Eli Uriegas 2016-12-24 18:14:45 -08:00 committed by GitHub
commit 275851a755

View File

@ -2,6 +2,7 @@ from aiofiles.os import stat
from os import path from os import path
from re import sub from re import sub
from time import strftime, gmtime from time import strftime, gmtime
from urllib.parse import unquote
from .exceptions import FileNotFound, InvalidUsage from .exceptions import FileNotFound, InvalidUsage
from .response import file, HTTPResponse from .response import file, HTTPResponse
@ -32,12 +33,17 @@ def register(app, uri, file_or_directory, pattern, use_modified_since):
# served. os.path.realpath seems to be very slow # served. os.path.realpath seems to be very slow
if file_uri and '../' in file_uri: if file_uri and '../' in file_uri:
raise InvalidUsage("Invalid URL") raise InvalidUsage("Invalid URL")
# Merge served directory and requested file if provided # Merge served directory and requested file if provided
# Strip all / that in the beginning of the URL to help prevent python # Strip all / that in the beginning of the URL to help prevent python
# from herping a derp and treating the uri as an absolute path # from herping a derp and treating the uri as an absolute path
file_path = path.join(file_or_directory, sub('^[/]*', '', file_uri)) \ file_path = file_or_directory
if file_uri else file_or_directory if file_uri:
file_path = path.join(
file_or_directory, sub('^[/]*', '', file_uri))
# URL decode the path sent by the browser otherwise we won't be able to
# match filenames which got encoded (filenames with spaces etc)
file_path = unquote(file_path)
try: try:
headers = {} headers = {}
# Check if the client has been sent this file before # Check if the client has been sent this file before