diff options
author | Robin Plumey <44498456+Rygone@users.noreply.github.com> | 2022-06-28 10:09:22 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-28 10:09:22 (GMT) |
commit | 176fd5571f299e6b3e6168e430a0d2f8d425d920 (patch) | |
tree | 8e9211738099e039d0ade6722b9ab124506af689 | |
parent | 81ac9ac4921c57c8f31464fed575ea0cfe84df70 (diff) | |
download | cpython-176fd5571f299e6b3e6168e430a0d2f8d425d920.zip cpython-176fd5571f299e6b3e6168e430a0d2f8d425d920.tar.gz cpython-176fd5571f299e6b3e6168e430a0d2f8d425d920.tar.bz2 |
gh-94018: Remove trailing spaces in _sanitize_windows_name (GH-94040)
Closes #94018.
Co-authored-by: Sam Ezeh <sam.z.ezeh@gmail.com>
Co-authored-by: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
Co-authored-by: Zachary Ware <zachary.ware@gmail.com>
-rw-r--r-- | Lib/test/test_zipfile.py | 2 | ||||
-rw-r--r-- | Lib/zipfile.py | 4 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Windows/2022-06-20-22-32-14.gh-issue-94018.bycC3A.rst | 1 |
3 files changed, 5 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 diff --git a/Misc/NEWS.d/next/Windows/2022-06-20-22-32-14.gh-issue-94018.bycC3A.rst b/Misc/NEWS.d/next/Windows/2022-06-20-22-32-14.gh-issue-94018.bycC3A.rst new file mode 100644 index 0000000..a2e558b --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2022-06-20-22-32-14.gh-issue-94018.bycC3A.rst @@ -0,0 +1 @@ +:mod:`zipfile` will now remove trailing spaces from path components when extracting files on Windows. |