classification
Title: SimpleHTTPServer serves files even if the URL has a trailing slash
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 3.4, Python 3.3, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: orsenthil Nosy List: karlcow, larry, orsenthil, python-dev, senko, vajrasky
Priority: low Keywords: easy, patch

Created on 2013-03-01 08:54 by larry, last changed 2013-09-13 07:24 by orsenthil. This issue is now closed.

Files
File name Uploaded Description Edit
issue-17324-test-1.patch karlcow, 2013-03-06 16:07 review
patch_for_fixing_the_server_serving_the_url_with_trailing_slash.txt vajrasky, 2013-07-08 16:52 Patch to fix the server should not serve the file which exists but with the trailing slash review
Messages (7)
msg183247 - (view) Author: Larry Hastings (larry) * (Python committer) Date: 2013-03-01 08:54
To reproduce:

1) Create a file called "foo.txt" in the local directory, put whatever you like in it.
2) Run "python -m SimpleHTTPServer" or "python3 -m http.server".
3) Point your web browser at "http://127.0.0.1:8000/foo.txt/".
4) Note that the server has served the contents of "foo.txt" as "foo.txt/".  It shouldn't do that!

Reproduced with 2.7.3, 3.2.3, and 3.3.0.  I assume it's still there in trunk.
msg183263 - (view) Author: Senthil Kumaran (orsenthil) * (Python committer) Date: 2013-03-01 15:16
I thought this was fixed (recently). Shall look again. Having the tests is the only hard part here.
msg183598 - (view) Author: karl (karlcow) * Date: 2013-03-06 16:07
orsenthil, 

would that test work?
See issue-17324-test-1.patch

Here the result of the test which is FAIL as planned (given the current issue).

→ ./python.exe Lib/test/test_httpservers.py 

test_header_buffering_of_send_error (__main__.BaseHTTPRequestHandlerTestCase) ... ok
[…]

test_get (__main__.SimpleHTTPServerTestCase) ... FAIL

[…]

test_start_with_double_slash (__main__.SimpleHTTPRequestHandlerTestCase) ... ok

======================================================================
FAIL: test_get (__main__.SimpleHTTPServerTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "Lib/test/test_httpservers.py", line 254, in test_get
    self.check_status_and_reason(response, 404, data=self.data)
  File "Lib/test/test_httpservers.py", line 243, in check_status_and_reason
    self.assertEqual(response.status, status)
AssertionError: 200 != 404

----------------------------------------------------------------------
Ran 39 tests in 4.382s

FAILED (failures=1)
Traceback (most recent call last):
  File "Lib/test/test_httpservers.py", line 686, in <module>
    test_main()
  File "Lib/test/test_httpservers.py", line 680, in test_main
    SimpleHTTPRequestHandlerTestCase,
  File "/Users/karl/Documents/2011/cpython/Lib/test/support.py", line 1589, in run_unittest
    _run_suite(suite)
  File "/Users/karl/Documents/2011/cpython/Lib/test/support.py", line 1564, in _run_suite
    raise TestFailed(err)
test.support.TestFailed: Traceback (most recent call last):
  File "Lib/test/test_httpservers.py", line 254, in test_get
    self.check_status_and_reason(response, 404, data=self.data)
  File "Lib/test/test_httpservers.py", line 243, in check_status_and_reason
    self.assertEqual(response.status, status)
AssertionError: 200 != 404

[141593 refs]
msg192439 - (view) Author: Senko Rasic (senko) * Date: 2013-07-06 13:25
The attached test (issue-17324-test-1) reproduces the issue for me on 3.4.0alpha.
msg192669 - (view) Author: Vajrasky Kok (vajrasky) * Date: 2013-07-08 16:52
Attached the fix and the unit test for this problem.
msg197555 - (view) Author: Roundup Robot (python-dev) Date: 2013-09-13 07:22
New changeset a58b620e4dc9 by Senthil Kumaran in branch '2.7':
Fix SimpleHTTPServer's request handling case on trailing '/'.
http://hg.python.org/cpython/rev/a58b620e4dc9

New changeset 1fcccbbe15e2 by Senthil Kumaran in branch '3.3':
Fix http.server's request handling case on trailing '/'.
http://hg.python.org/cpython/rev/1fcccbbe15e2

New changeset b85c9d2a5227 by Senthil Kumaran in branch 'default':
Fix http.server's request handling case on trailing '/'.
http://hg.python.org/cpython/rev/b85c9d2a5227
msg197556 - (view) Author: Senthil Kumaran (orsenthil) * (Python committer) Date: 2013-09-13 07:24
Thanks for the patches, Vajrasky and Karl. Fixed in currently active (3.4,3.3 and 2.7) versions of python.
History
Date User Action Args
2013-09-13 07:24:26orsenthilsetstatus: open -> closed
versions: - Python 3.2
messages: + msg197556

assignee: orsenthil
resolution: fixed
stage: test needed -> resolved
2013-09-13 07:22:53python-devsetnosy: + python-dev
messages: + msg197555
2013-07-08 16:52:22vajraskysetfiles: + patch_for_fixing_the_server_serving_the_url_with_trailing_slash.txt
nosy: + vajrasky
messages: + msg192669

2013-07-06 13:25:38senkosetnosy: + senko
messages: + msg192439
2013-03-06 16:07:56karlcowsetfiles: + issue-17324-test-1.patch

nosy: + karlcow
messages: + msg183598

keywords: + patch
2013-03-01 15:16:29orsenthilsetnosy: + orsenthil
messages: + msg183263
2013-03-01 08:54:33larrysettype: behavior
stage: test needed
2013-03-01 08:54:06larrycreate