cpython: a389700fbc74 (original) (raw)
Mercurial > cpython
changeset 83505:a389700fbc74 2.7
Ensure that plistlib doesn't corrupt deeply nested datastructures Without this changeset plistlib would write empty tags for plistlib.Data objects in deeply nested datastructures. Fixes #17353 [#17353]
Ronald Oussoren ronaldoussoren@mac.com | |
---|---|
date | Tue, 23 Apr 2013 13:47:06 +0200 |
parents | 990c1bd26ef1 |
children | 09811ecd5df1 |
files | Lib/plistlib.py Lib/test/test_plistlib.py Misc/NEWS |
diffstat | 3 files changed, 16 insertions(+), 2 deletions(-)[+] [-] Lib/plistlib.py 4 Lib/test/test_plistlib.py 12 Misc/NEWS 2 |
line wrap: on
line diff
--- a/Lib/plistlib.py +++ b/Lib/plistlib.py @@ -262,8 +262,8 @@ class PlistWriter(DumbXMLWriter): def writeData(self, data): self.beginElement("data") self.indentLevel -= 1
maxlinelength = 76 - len(self.indent.replace("\t", " " * 8) *[](#l1.7)
self.indentLevel)[](#l1.8)
maxlinelength = max(16, 76 - len(self.indent.replace("\t", " " * 8) *[](#l1.9)
self.indentLevel))[](#l1.10) for line in data.asBase64(maxlinelength).split("\n"):[](#l1.11) if line:[](#l1.12) self.writeln(line)[](#l1.13)
--- a/Lib/test/test_plistlib.py +++ b/Lib/test/test_plistlib.py @@ -135,6 +135,18 @@ class TestPlistlib(unittest.TestCase): data2 = plistlib.writePlistToString(pl2) self.assertEqual(data, data2)
- def test_indentation_array(self):
data = [[[[[[[[{'test': plistlib.Data(b'aaaaaa')}]]]]]]]][](#l2.8)
self.assertEqual(plistlib.readPlistFromString(plistlib.writePlistToString(data)), data)[](#l2.9)
- def test_indentation_dict(self):
data = {'1': {'2': {'3': {'4': {'5': {'6': {'7': {'8': {'9': plistlib.Data(b'aaaaaa')}}}}}}}}}[](#l2.12)
self.assertEqual(plistlib.readPlistFromString(plistlib.writePlistToString(data)), data)[](#l2.13)
- def test_indentation_dict_mix(self):
data = {'1': {'2': [{'3': [[[[[{'test': plistlib.Data(b'aaaaaa')}]]]]]}]}}[](#l2.16)
self.assertEqual(plistlib.readPlistFromString(plistlib.writePlistToString(data)), data)[](#l2.17)
+ def test_appleformatting(self): pl = plistlib.readPlistFromString(TESTDATA) data = plistlib.writePlistToString(pl)
--- a/Misc/NEWS +++ b/Misc/NEWS @@ -28,6 +28,8 @@ Core and Builtins Library ------- +- Issue #17353: Plistlib emitted empty data tags with deeply nested datastructures +