[Python-Dev] bug in tarfile module?

Chris Withers chris at simplistix.co.uk
Thu Aug 23 08:46:04 CEST 2012


Hi All,

This feels like a bug, but just wanted to check here before filing a 
report if I've missed something:

buzzkill$ python2.7
Enthought Python Distribution -- www.enthought.com
Version: 7.2-2 (32-bit)

Python 2.7.2 |EPD 7.2-2 (32-bit)| (default, Sep  7 2011, 09:16:50)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "packages", "demo" or "enthought" for more information.
 >>> import tarfile
 >>> source = open('/src/Python-2.6.7.tgz', 'rb')
 >>> tar = tarfile.open(fileobj=source, mode='r|*')
 >>> member = tar.extractfile('Python-2.6.7/Lib/genericpath.py')
 >>> data = member.read()
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File 
"/Library/Frameworks/Python.framework/Versions/7.2/lib/python2.7/tarfile.py", 
line 815, in read
     buf += self.fileobj.read()
   File 
"/Library/Frameworks/Python.framework/Versions/7.2/lib/python2.7/tarfile.py", 
line 735, in read
     return self.readnormal(size)
   File 
"/Library/Frameworks/Python.framework/Versions/7.2/lib/python2.7/tarfile.py", 
line 742, in readnormal
     self.fileobj.seek(self.offset + self.position)
   File 
"/Library/Frameworks/Python.framework/Versions/7.2/lib/python2.7/tarfile.py", 
line 554, in seek
     raise StreamError("seeking backwards is not allowed")
tarfile.StreamError: seeking backwards is not allowed

The key is the "mode='r*|" which I understood to be specifically for 
reading blocks from a stream without seeking that would cause problems.

I've reproduced on Py26 and Py27 on Mac OS X, and Py26 on SUSE.

Thoughts?

Chris

-- 
Simplistix - Content Management, Batch Processing & Python Consulting
             - http://www.simplistix.co.uk


More information about the Python-Dev mailing list