]> granicus.if.org Git - python/commitdiff
Issue #24514: tarfile now tolerates number fields consisting of only whitespace.
authorLars Gustäbel <lars@gustaebel.de>
Thu, 2 Jul 2015 17:38:38 +0000 (19:38 +0200)
committerLars Gustäbel <lars@gustaebel.de>
Thu, 2 Jul 2015 17:38:38 +0000 (19:38 +0200)
Lib/tarfile.py
Lib/test/test_tarfile.py
Misc/NEWS

index e3a2bb338e1b9b67bc0e69d79b0d771d9a0e13e5..6d8d36cdf8a6177b3f7a77b7e26fe4c877586ecb 100755 (executable)
@@ -178,7 +178,8 @@ def nti(s):
             n = -(256 ** (len(s) - 1) - n)
     else:
         try:
-            n = int(nts(s, "ascii", "strict") or "0", 8)
+            s = nts(s, "ascii", "strict")
+            n = int(s.strip() or "0", 8)
         except ValueError:
             raise InvalidHeaderError("invalid header")
     return n
index c135304f407074d92a8115ccb483dfdf482ea0c2..5b55e07d4063139407618339ecdfa051f5ba5cc9 100644 (file)
@@ -1842,6 +1842,10 @@ class MiscTest(unittest.TestCase):
         self.assertEqual(tarfile.nti(b"\xff\x00\x00\x00\x00\x00\x00\x00"),
                          -0x100000000000000)
 
+        # Issue 24514: Test if empty number fields are converted to zero.
+        self.assertEqual(tarfile.nti(b"\0"), 0)
+        self.assertEqual(tarfile.nti(b"       \0"), 0)
+
     def test_write_number_fields(self):
         self.assertEqual(tarfile.itn(1), b"0000001\x00")
         self.assertEqual(tarfile.itn(0o7777777), b"7777777\x00")
index 19451c4c737759655f14e0da9f715b40ef6f3488..1ed181df1293d64c3204f7d38ceff8f59623ebea 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -64,6 +64,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #24514: tarfile now tolerates number fields consisting of only
+  whitespace.
+
 - Issue #19176: Fixed doctype() related bugs in C implementation of ElementTree.
   A deprecation warning no longer issued by XMLParser subclass with default
   doctype() method.  Direct call of doctype() now issues a warning.  Parser's