]> granicus.if.org Git - python/commit
Issue #6123: Fix opening empty archives and files.
authorLars Gustäbel <lars@gustaebel.de>
Sun, 22 Nov 2009 18:30:53 +0000 (18:30 +0000)
committerLars Gustäbel <lars@gustaebel.de>
Sun, 22 Nov 2009 18:30:53 +0000 (18:30 +0000)
commitdd866d57af2e1b82c155b4613c303099785ed62c
tree13c311d2e6a3f9988ef4dccd43ce6ca6164e2a18
parent814d02dcd1b30a98f9a34c710be35de6db82aa40
Issue #6123: Fix opening empty archives and files.

(Note that an empty archive is not the same as an empty file. An
empty archive contains no members and is correctly terminated with an
EOF block full of zeros. An empty file contains no data at all.)

The problem was that although tarfile was able to create empty
archives, it failed to open them raising a ReadError. On the other
hand, tarfile opened empty files without error in most read modes and
presented them as empty archives. (However, some modes still raised
errors: "r|gz" raised ReadError, but "r:gz" worked, "r:bz2" even
raised EOFError.)

In order to get a more fine-grained control over the various internal
error conditions I now split up the HeaderError exception into a
number of meaningful sub-exceptions. This makes it easier in the
TarFile.next() method to react to the different conditions in the
correct way.

The visible change in its behaviour now is that tarfile will open
empty archives correctly and raise ReadError consistently for empty
files.
Lib/tarfile.py
Lib/test/test_tarfile.py
Misc/NEWS