diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_zipfile.py | 2 | ||||
-rw-r--r-- | Lib/zipfile.py | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index f4c11d8..fa0ca5a 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -1440,6 +1440,8 @@ class ExtractTests(unittest.TestCase): self.assertEqual(san(r',,?,C:,foo,bar/z', ','), r'_,C_,foo,bar/z') self.assertEqual(san(r'a\b,c<d>e|f"g?h*i', ','), r'a\b,c_d_e_f_g_h_i') self.assertEqual(san('../../foo../../ba..r', '/'), r'foo/ba..r') + self.assertEqual(san(' / /foo / /ba r', '/'), r'foo/ba r') + self.assertEqual(san(' . /. /foo ./ . /. ./ba .r', '/'), r'foo/ba .r') def test_extract_hackers_arcnames_common_cases(self): common_hacknames = [ diff --git a/Lib/zipfile.py b/Lib/zipfile.py index fc6ca65..e3b7a61 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -1685,8 +1685,8 @@ class ZipFile: table = str.maketrans(illegal, '_' * len(illegal)) cls._windows_illegal_name_trans_table = table arcname = arcname.translate(table) - # remove trailing dots - arcname = (x.rstrip('.') for x in arcname.split(pathsep)) + # remove trailing dots and spaces + arcname = (x.rstrip(' .') for x in arcname.split(pathsep)) # rejoin, removing empty parts. arcname = pathsep.join(x for x in arcname if x) return arcname |