File tree Expand file tree Collapse file tree 3 files changed +26
-3
lines changed Expand file tree Collapse file tree 3 files changed +26
-3
lines changed Original file line number Diff line number Diff line change @@ -774,9 +774,9 @@ def translate_path(self, path):
774
774
words = filter (None , words )
775
775
path = os .getcwd ()
776
776
for word in words :
777
- drive , word = os .path .splitdrive (word )
778
- head , word = os . path . split ( word )
779
- if word in ( os . curdir , os . pardir ): continue
777
+ if os .path .dirname (word ) or word in ( os . curdir , os . pardir ):
778
+ # Ignore components that are not a simple file/directory name
779
+ continue
780
780
path = os .path .join (path , word )
781
781
if trailing_slash :
782
782
path += '/'
Original file line number Diff line number Diff line change 12
12
import sys
13
13
import re
14
14
import base64
15
+ import ntpath
15
16
import shutil
16
17
import urllib .parse
17
18
import html
@@ -918,6 +919,24 @@ def test_start_with_double_slash(self):
918
919
path = self .handler .translate_path ('//filename?foo=bar' )
919
920
self .assertEqual (path , self .translated )
920
921
922
+ def test_windows_colon (self ):
923
+ with support .swap_attr (server .os , 'path' , ntpath ):
924
+ path = self .handler .translate_path ('c:c:c:foo/filename' )
925
+ path = path .replace (ntpath .sep , os .sep )
926
+ self .assertEqual (path , self .translated )
927
+
928
+ path = self .handler .translate_path ('\\ c:../filename' )
929
+ path = path .replace (ntpath .sep , os .sep )
930
+ self .assertEqual (path , self .translated )
931
+
932
+ path = self .handler .translate_path ('c:\\ c:..\\ foo/filename' )
933
+ path = path .replace (ntpath .sep , os .sep )
934
+ self .assertEqual (path , self .translated )
935
+
936
+ path = self .handler .translate_path ('c:c:foo\\ c:c:bar/filename' )
937
+ path = path .replace (ntpath .sep , os .sep )
938
+ self .assertEqual (path , self .translated )
939
+
921
940
922
941
class MiscTestCase (unittest .TestCase ):
923
942
def test_all (self ):
Original file line number Diff line number Diff line change @@ -107,6 +107,10 @@ Core and Builtins
107
107
Library
108
108
-------
109
109
110
+ - Issue #26657: Fix directory traversal vulnerability with http.server on
111
+ Windows. This fixes a regression that was introduced in 3.3.4rc1 and
112
+ 3.4.0rc1. Based on patch by Philipp Hagemeister.
113
+
110
114
- Issue #26717: Stop encoding Latin-1-ized WSGI paths with UTF-8. Patch by
111
115
Anthony Sottile.
112
116
You can’t perform that action at this time.
0 commit comments