]> granicus.if.org Git - python/commitdiff
Patch [ 1583506 ] tarfile.py: 100-char filenames are truncated
authorGeorg Brandl <georg@python.org>
Tue, 24 Oct 2006 16:54:16 +0000 (16:54 +0000)
committerGeorg Brandl <georg@python.org>
Tue, 24 Oct 2006 16:54:16 +0000 (16:54 +0000)
Lib/tarfile.py
Lib/test/test_tarfile.py

index 8d5f021c39a05a6258e0dd3e3490c13be00aeb5d..7c140da73c5aa2fe513ed7cf7f7658a72a5c3f0d 100644 (file)
@@ -136,7 +136,7 @@ TOEXEC  = 0001           # execute/search by other
 def stn(s, length):
     """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):
     """Convert a number field to a python number.
index ebcb8c59f5dc9c07ef9d075049815af4f69de0ed..ee83cbebd7e32e2dc7cd0bdc87f4210c7279787b 100644 (file)
@@ -280,6 +280,32 @@ class WriteTest(BaseTest):
             else:
                 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):
     mode = 'w'
 
@@ -623,6 +649,7 @@ def test_main():
         ReadAsteriskTest,
         ReadStreamAsteriskTest,
         WriteTest,
+        Write100Test,
         WriteSize0Test,
         WriteStreamTest,
         WriteGNULongTest,