summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Lib/tarfile.py2
-rw-r--r--Lib/test/test_tarfile.py16
-rw-r--r--Misc/NEWS3
3 files changed, 19 insertions, 2 deletions
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 1ab13f0e41..ee9922c60a 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -1522,7 +1522,7 @@ class TarFile(object):
if hasattr(fileobj, "mode"):
self._mode = fileobj.mode
self._extfileobj = True
- self.name = os.path.abspath(name)
+ self.name = os.path.abspath(name) if name else None
self.fileobj = fileobj
# Init attributes.
diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
index 596b0adac0..1f0825831c 100644
--- a/Lib/test/test_tarfile.py
+++ b/Lib/test/test_tarfile.py
@@ -141,11 +141,25 @@ class UstarReadTest(ReadTest):
class MiscReadTest(ReadTest):
- def test_no_filename(self):
+ def test_no_name_argument(self):
fobj = open(self.tarname, "rb")
tar = tarfile.open(fileobj=fobj, mode=self.mode)
self.assertEqual(tar.name, os.path.abspath(fobj.name))
+ def test_no_name_attribute(self):
+ data = open(self.tarname, "rb").read()
+ fobj = StringIO.StringIO(data)
+ self.assertRaises(AttributeError, getattr, fobj, "name")
+ tar = tarfile.open(fileobj=fobj, mode=self.mode)
+ self.assertEqual(tar.name, None)
+
+ def test_empty_name_attribute(self):
+ data = open(self.tarname, "rb").read()
+ fobj = StringIO.StringIO(data)
+ fobj.name = ""
+ tar = tarfile.open(fileobj=fobj, mode=self.mode)
+ self.assertEqual(tar.name, None)
+
def test_fail_comp(self):
# For Gzip and Bz2 Tests: fail with a ReadError on an uncompressed file.
if self.mode == "r:":
diff --git a/Misc/NEWS b/Misc/NEWS
index 5ba18bc656..f9a3a0c985 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -240,6 +240,9 @@ Core and builtins
Library
-------
+- TarFile.__init__() no longer fails if no name argument is passed and
+ the fileobj argument has no usable name attribute (e.g. StringIO).
+
- The functools module now provides 'reduce', for forward compatibility
with Python 3000.