mirror of
https://github.com/python/cpython.git
synced 2025-12-04 00:30:19 +00:00
Issue #25019: Fixed a crash caused by setting non-string key of expat parser.
Added additional tests for expat parser attributes. Based on patch by John Leitch.
This commit is contained in:
commit
3b1bc7828d
4 changed files with 51 additions and 16 deletions
|
|
@ -16,22 +16,47 @@ from test.support import sortdict
|
|||
class SetAttributeTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.parser = expat.ParserCreate(namespace_separator='!')
|
||||
self.set_get_pairs = [
|
||||
[0, 0],
|
||||
[1, 1],
|
||||
[2, 1],
|
||||
[0, 0],
|
||||
]
|
||||
|
||||
def test_buffer_text(self):
|
||||
self.assertIs(self.parser.buffer_text, False)
|
||||
for x in 0, 1, 2, 0:
|
||||
self.parser.buffer_text = x
|
||||
self.assertIs(self.parser.buffer_text, bool(x))
|
||||
|
||||
def test_namespace_prefixes(self):
|
||||
self.assertIs(self.parser.namespace_prefixes, False)
|
||||
for x in 0, 1, 2, 0:
|
||||
self.parser.namespace_prefixes = x
|
||||
self.assertIs(self.parser.namespace_prefixes, bool(x))
|
||||
|
||||
def test_ordered_attributes(self):
|
||||
for x, y in self.set_get_pairs:
|
||||
self.assertIs(self.parser.ordered_attributes, False)
|
||||
for x in 0, 1, 2, 0:
|
||||
self.parser.ordered_attributes = x
|
||||
self.assertEqual(self.parser.ordered_attributes, y)
|
||||
self.assertIs(self.parser.ordered_attributes, bool(x))
|
||||
|
||||
def test_specified_attributes(self):
|
||||
for x, y in self.set_get_pairs:
|
||||
self.assertIs(self.parser.specified_attributes, False)
|
||||
for x in 0, 1, 2, 0:
|
||||
self.parser.specified_attributes = x
|
||||
self.assertEqual(self.parser.specified_attributes, y)
|
||||
self.assertIs(self.parser.specified_attributes, bool(x))
|
||||
|
||||
def test_specified_attributes(self):
|
||||
self.assertIs(self.parser.specified_attributes, False)
|
||||
for x in 0, 1, 2, 0:
|
||||
self.parser.specified_attributes = x
|
||||
self.assertIs(self.parser.specified_attributes, bool(x))
|
||||
|
||||
def test_invalid_attributes(self):
|
||||
with self.assertRaises(AttributeError):
|
||||
self.parser.returns_unicode = 1
|
||||
with self.assertRaises(AttributeError):
|
||||
self.parser.returns_unicode
|
||||
|
||||
# Issue #25019
|
||||
self.assertRaises(TypeError, setattr, self.parser, range(0xF), 0)
|
||||
self.assertRaises(TypeError, self.parser.__setattr__, range(0xF), 0)
|
||||
self.assertRaises(TypeError, getattr, self.parser, range(0xF))
|
||||
|
||||
|
||||
data = b'''\
|
||||
|
|
@ -514,11 +539,12 @@ class ChardataBufferTest(unittest.TestCase):
|
|||
def test_wrong_size(self):
|
||||
parser = expat.ParserCreate()
|
||||
parser.buffer_text = 1
|
||||
def f(size):
|
||||
parser.buffer_size = size
|
||||
|
||||
self.assertRaises(ValueError, f, -1)
|
||||
self.assertRaises(ValueError, f, 0)
|
||||
with self.assertRaises(ValueError):
|
||||
parser.buffer_size = -1
|
||||
with self.assertRaises(ValueError):
|
||||
parser.buffer_size = 0
|
||||
with self.assertRaises(TypeError):
|
||||
parser.buffer_size = 512.0
|
||||
|
||||
def test_unchanged_size(self):
|
||||
xml1 = b"<?xml version='1.0' encoding='iso8859'?><s>" + b'a' * 512
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue