mirror of
https://github.com/python/cpython.git
synced 2026-01-05 23:12:38 +00:00
(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
This commit is contained in:
commit
a8a5c58a19
3 changed files with 16 additions and 2 deletions
|
|
@ -228,8 +228,8 @@ def writeValue(self, value):
|
|||
def writeData(self, data):
|
||||
self.beginElement("data")
|
||||
self.indentLevel -= 1
|
||||
maxlinelength = 76 - len(self.indent.replace(b"\t", b" " * 8) *
|
||||
self.indentLevel)
|
||||
maxlinelength = max(16, 76 - len(self.indent.replace(b"\t", b" " * 8) *
|
||||
self.indentLevel))
|
||||
for line in data.asBase64(maxlinelength).split(b"\n"):
|
||||
if line:
|
||||
self.writeln(line)
|
||||
|
|
|
|||
|
|
@ -141,6 +141,18 @@ def test_bytes(self):
|
|||
data2 = plistlib.writePlistToBytes(pl2)
|
||||
self.assertEqual(data, data2)
|
||||
|
||||
def test_indentation_array(self):
|
||||
data = [[[[[[[[{'test': plistlib.Data(b'aaaaaa')}]]]]]]]]
|
||||
self.assertEqual(plistlib.readPlistFromBytes(plistlib.writePlistToBytes(data)), data)
|
||||
|
||||
def test_indentation_dict(self):
|
||||
data = {'1': {'2': {'3': {'4': {'5': {'6': {'7': {'8': {'9': plistlib.Data(b'aaaaaa')}}}}}}}}}
|
||||
self.assertEqual(plistlib.readPlistFromBytes(plistlib.writePlistToBytes(data)), data)
|
||||
|
||||
def test_indentation_dict_mix(self):
|
||||
data = {'1': {'2': [{'3': [[[[[{'test': plistlib.Data(b'aaaaaa')}]]]]]}]}}
|
||||
self.assertEqual(plistlib.readPlistFromBytes(plistlib.writePlistToBytes(data)), data)
|
||||
|
||||
def test_appleformatting(self):
|
||||
pl = plistlib.readPlistFromBytes(TESTDATA)
|
||||
data = plistlib.writePlistToBytes(pl)
|
||||
|
|
|
|||
|
|
@ -49,6 +49,8 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #17353: Plistlib emitted empty data tags with deeply nested datastructures
|
||||
|
||||
- Issue #11714: Use 'with' statements to assure a Semaphore releases a
|
||||
condition variable. Original patch by Thomas Rachel.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue