From 9319e43c675920fa69d1461bf9c6bb451647ae4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Gust=C3=A4bel?= Date: Fri, 20 Apr 2007 20:10:59 +0000 Subject: [PATCH] Patch #1695229: Fix a regression with tarfile.open() and a missing name argument. --- Lib/tarfile.py | 4 +++- Lib/test/test_tarfile.py | 10 ++++++++-- Misc/NEWS | 3 +++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Lib/tarfile.py b/Lib/tarfile.py index 261d9fbc362..474e306e4c0 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -1044,7 +1044,9 @@ class TarFile(object): can be determined, `mode' is overridden by `fileobj's mode. `fileobj' is not closed, when TarFile is closed. """ - self.name = os.path.abspath(name) + self.name = name + if self.name is not None: + self.name = os.path.abspath(name) if len(mode) > 1 or mode not in "raw": raise ValueError("mode must be 'r', 'a' or 'w'") diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index b1cbcf69c30..dc262f656da 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -633,15 +633,21 @@ class FileModeTest(unittest.TestCase): self.assertEqual(tarfile.filemode(07111), '---s--s--t') class OpenFileobjTest(BaseTest): - # Test for SF bug #1496501. def test_opener(self): + # Test for SF bug #1496501. fobj = StringIO.StringIO("foo\n") try: - tarfile.open("", "r", fileobj=fobj) + tarfile.open("", mode="r", fileobj=fobj) except tarfile.ReadError: self.assertEqual(fobj.tell(), 0, "fileobj's position has moved") + def test_fileobj(self): + # Test for SF bug #1695229, opening a tarfile without + # a name argument. + tarfile.open(mode="r", fileobj=open(tarname(""))) + tarfile.TarFile(mode="r", fileobj=open(tarname(""))) + if bz2: # Bzip2 TestCases class ReadTestBzip2(ReadTestGzip): diff --git a/Misc/NEWS b/Misc/NEWS index 58f87eac662..450bbce60a0 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 2.5.2c1? Library ------- +- Patch #1695229: Fix a regression with tarfile.open() and a missing name + argument. + - tarfile.py: Fix directory names to have only one trailing slash.