diff -r 73aa6d672b81 Lib/test/issue15858.tar Binary file Lib/test/issue15858.tar has changed diff -r 73aa6d672b81 Lib/test/test_tarfile.py --- a/Lib/test/test_tarfile.py Sun Feb 23 18:01:08 2014 -0500 +++ b/Lib/test/test_tarfile.py Sun Feb 23 22:10:09 2014 -0500 @@ -542,6 +542,27 @@ self.assertEqual(m1.offset, m2.offset) self.assertEqual(m1.get_info(), m2.get_info()) + def test_uid_only_space_nul(self): + # Issue #15858: tarfile missing entries due to omitted uid/gid fields + # TarFile.next() silently fails if it encounters an entry with the + # uid/gid field containing only spaces or NULs. The included tar + # file 'issue15858.tar' contains a valid tar with an entry with + # a uid/gid field containing only spaces or NULs. The two entries + # are foo/ and foo/a. foo/a should be returned. + tarname = support.findfile("issue15858.tar") + with tarfile.open(tarname) as tar: + # First entry is 'foo' + tarinfo = tar.next() + self.assertIsNotNone(tarinfo, "expecting TarInfo object") + self.assertEqual(tarinfo.name, "foo", + "expecting TarInfo object with name 'foo'") + # Next entry contains uid/gid containing only spaces and NULs + tarinfo = tar.next() + self.assertIsNotNone(tarinfo, "expecting TarInfo object") + self.assertEqual(tarinfo.name, "foo/a", + "expecting TarInfo object with name 'foo/a'") + + class MiscReadTest(MiscReadTestBase, unittest.TestCase): test_fail_comp = None