mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
Patch [ 1583506 ] tarfile.py: 100-char filenames are truncated
(backport from rev. 52431)
This commit is contained in:
parent
920fa6a102
commit
ee23f4bba7
2 changed files with 28 additions and 1 deletions
|
@ -136,7 +136,7 @@ TOEXEC = 0001 # execute/search by other
|
||||||
def stn(s, length):
|
def stn(s, length):
|
||||||
"""Convert a python string to a null-terminated string buffer.
|
"""Convert a python string to a null-terminated string buffer.
|
||||||
"""
|
"""
|
||||||
return s[:length-1] + (length - len(s) - 1) * NUL + NUL
|
return s[:length] + (length - len(s)) * NUL
|
||||||
|
|
||||||
def nti(s):
|
def nti(s):
|
||||||
"""Convert a number field to a python number.
|
"""Convert a number field to a python number.
|
||||||
|
|
|
@ -280,6 +280,32 @@ class WriteTest(BaseTest):
|
||||||
else:
|
else:
|
||||||
self.dst.addfile(tarinfo, f)
|
self.dst.addfile(tarinfo, f)
|
||||||
|
|
||||||
|
|
||||||
|
class Write100Test(BaseTest):
|
||||||
|
# The name field in a tar header stores strings of at most 100 chars.
|
||||||
|
# If a string is shorter than 100 chars it has to be padded with '\0',
|
||||||
|
# which implies that a string of exactly 100 chars is stored without
|
||||||
|
# a trailing '\0'.
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.name = "01234567890123456789012345678901234567890123456789"
|
||||||
|
self.name += "01234567890123456789012345678901234567890123456789"
|
||||||
|
|
||||||
|
self.tar = tarfile.open(tmpname(), "w")
|
||||||
|
t = tarfile.TarInfo(self.name)
|
||||||
|
self.tar.addfile(t)
|
||||||
|
self.tar.close()
|
||||||
|
|
||||||
|
self.tar = tarfile.open(tmpname())
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
self.tar.close()
|
||||||
|
|
||||||
|
def test(self):
|
||||||
|
self.assertEqual(self.tar.getnames()[0], self.name,
|
||||||
|
"failed to store 100 char filename")
|
||||||
|
|
||||||
|
|
||||||
class WriteSize0Test(BaseTest):
|
class WriteSize0Test(BaseTest):
|
||||||
mode = 'w'
|
mode = 'w'
|
||||||
|
|
||||||
|
@ -623,6 +649,7 @@ def test_main():
|
||||||
ReadAsteriskTest,
|
ReadAsteriskTest,
|
||||||
ReadStreamAsteriskTest,
|
ReadStreamAsteriskTest,
|
||||||
WriteTest,
|
WriteTest,
|
||||||
|
Write100Test,
|
||||||
WriteSize0Test,
|
WriteSize0Test,
|
||||||
WriteStreamTest,
|
WriteStreamTest,
|
||||||
WriteGNULongTest,
|
WriteGNULongTest,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue