cpython: e0c0bcd60033 (original) (raw)
Mercurial > cpython
changeset 83507:e0c0bcd60033
(3.3->default) 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:48:29 +0200 |
parents | ceb1ee4bc214(current diff)6a8cb4875ac6(diff) |
children | eafa0a802444 |
files | 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 @@ -228,8 +228,8 @@ class PlistWriter(DumbXMLWriter): def writeData(self, data): self.beginElement("data") self.indentLevel -= 1
maxlinelength = 76 - len(self.indent.replace(b"\t", b" " * 8) *[](#l1.7)
self.indentLevel)[](#l1.8)
maxlinelength = max(16, 76 - len(self.indent.replace(b"\t", b" " * 8) *[](#l1.9)
self.indentLevel))[](#l1.10) for line in data.asBase64(maxlinelength).split(b"\n"):[](#l1.11) if line:[](#l1.12) self.writeln(line)[](#l1.13)
--- a/Lib/test/test_plistlib.py +++ b/Lib/test/test_plistlib.py @@ -141,6 +141,18 @@ class TestPlistlib(unittest.TestCase): data2 = plistlib.writePlistToBytes(pl2) self.assertEqual(data, data2)
- def test_indentation_array(self):
data = [[[[[[[[{'test': plistlib.Data(b'aaaaaa')}]]]]]]]][](#l2.8)
self.assertEqual(plistlib.readPlistFromBytes(plistlib.writePlistToBytes(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.readPlistFromBytes(plistlib.writePlistToBytes(data)), data)[](#l2.13)
- def test_indentation_dict_mix(self):
data = {'1': {'2': [{'3': [[[[[{'test': plistlib.Data(b'aaaaaa')}]]]]]}]}}[](#l2.16)
self.assertEqual(plistlib.readPlistFromBytes(plistlib.writePlistToBytes(data)), data)[](#l2.17)
+ def test_appleformatting(self): pl = plistlib.readPlistFromBytes(TESTDATA) data = plistlib.writePlistToBytes(pl)
--- a/Misc/NEWS +++ b/Misc/NEWS @@ -49,6 +49,8 @@ Core and Builtins Library ------- +- Issue #17353: Plistlib emitted empty data tags with deeply nested datastructures +