[issue10231] SimpleHTTPRequestHandler directory bugs
Hallvard B Furuseth
report at bugs.python.org
Fri Oct 29 15:10:35 CEST 2010
New submission from Hallvard B Furuseth <h.b.furuseth at usit.uio.no>:
SimpleHTTPRequestHandler directory bugs
Running 3.2a3 http/server.py or 2.7 SimpleHTTPServer.py as a script:
* Redirection appends "/" to the unparsed URL instead of to the
pathname component of the parsed URL: "foo/dir?baz" => "foo/dir?baz/".
* The unparsed URL is also used to check if the URL ends with "/".
Thus "foo/dir?baz/" gives a directory listing instead of redirecting,
which makes the files relative to "foo/" instead of to "foo/dir/".
* translate_path("directory/") produces filenames without a final "/".
Not sure if that is correct for CGI env['PATH_TRANSLATED']. Anyway:
This means a non-directory file with a final slash is accepted, but
again relative URLs in that file will refer to the wrong absolute URL.
".../foo.html/" + relative URL "bar.html" -> ".../foo.html/bar.html".
However if translate_path("...foo/") is changed and you use stat() on
the result, I do not know if all relevant directory operations work
with the final directory separator on all OSes. I seem to remember
getting errors in some OS for stat("dirname/", &st) in C.
* translate_path() does not handle initial "."/".." on non-Posix systems.
If that's wrong, it can (ignoring other issues listed here) do this:
drop = frozenset((os.curdir, os.pardir, '', '.', '..'))
for ...:
if word not in drop: os.path.join(path, word)
Though it looks a bit quicker to do
words, drop = [], frozenset((os.curdir, os.pardir, '', '.', '..'))
for word in filter(None, path.split('/')):
word = os.path.split(os.path.splitdrive(word)[1])[1]
if word not in drop: words.append(word)
return os.path.join(os.getcwd(), *words)
unless that can somehow produce a different result.
----------
components: Library (Lib)
messages: 119899
nosy: hfuru
priority: normal
severity: normal
status: open
title: SimpleHTTPRequestHandler directory bugs
type: behavior
versions: Python 3.2
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue10231>
_______________________________________
More information about the Python-bugs-list
mailing list