diff options
-rw-r--r-- | Lib/tarfile.py | 2 | ||||
-rw-r--r-- | Lib/test/test_tarfile.py | 7 | ||||
-rw-r--r-- | Misc/NEWS | 2 |
3 files changed, 11 insertions, 0 deletions
diff --git a/Lib/tarfile.py b/Lib/tarfile.py index ed5bcf2..bd73965 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -454,6 +454,8 @@ class _Stream: 0) timestamp = struct.pack("<L", long(time.time())) self.__write("\037\213\010\010%s\002\377" % timestamp) + if type(self.name) is unicode: + self.name = self.name.encode("iso-8859-1", "replace") if self.name.endswith(".gz"): self.name = self.name[:-3] self.__write(self.name + NUL) diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index 49d2d07..d5b864e 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -994,6 +994,13 @@ class StreamWriteTest(WriteTestBase): finally: os.umask(original_umask) + def test_issue13639(self): + try: + with tarfile.open(unicode(tmpname, sys.getfilesystemencoding()), self.mode): + pass + except UnicodeDecodeError: + self.fail("_Stream failed to write unicode filename") + class GNUWriteTest(unittest.TestCase): # This testcase checks for correct creation of GNU Longname @@ -86,6 +86,8 @@ Core and Builtins Library ------- +- Issue #13639: Accept unicode filenames in tarfile.open(mode="w|gz"). + - Issue #1785: Fix inspect and pydoc with misbehaving descriptors. - Issue #7502: Fix equality comparison for DocTestCase instances. Patch by |