bpo-42151: don't set specified_attributes=1 in pure Python ElementTree (GH-22987)

This commit is contained in:
Felix C. Stegerman 2021-02-24 03:25:31 +01:00 committed by GitHub
parent b9fe16a027
commit 1f433406bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 2 deletions

View File

@ -108,6 +108,19 @@
<document>&entity;</document>
"""
ATTLIST_XML = """\
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Foo [
<!ELEMENT foo (bar*)>
<!ELEMENT bar (#PCDATA)*>
<!ATTLIST bar xml:lang CDATA "eng">
<!ENTITY qux "quux">
]>
<foo>
<bar>&qux;</bar>
</foo>
"""
def checkwarnings(*filters, quiet=False):
def decorator(test):
def newtest(*args, **kwargs):
@ -1354,6 +1367,12 @@ def test_tree_write_attribute_order(self):
self.assertEqual(serialize(root, method='html'),
'<cirriculum status="public" company="example"></cirriculum>')
def test_attlist_default(self):
# Test default attribute values; See BPO 42151.
root = ET.fromstring(ATTLIST_XML)
self.assertEqual(root[0].attrib,
{'{http://www.w3.org/XML/1998/namespace}lang': 'eng'})
class XMLPullParserTest(unittest.TestCase):

View File

@ -1560,7 +1560,6 @@ def __init__(self, *, target=None, encoding=None):
# Configure pyexpat: buffering, new-style attribute handling.
parser.buffer_text = 1
parser.ordered_attributes = 1
parser.specified_attributes = 1
self._doctype = None
self.entity = {}
try:
@ -1580,7 +1579,6 @@ def _setevents(self, events_queue, events_to_report):
for event_name in events_to_report:
if event_name == "start":
parser.ordered_attributes = 1
parser.specified_attributes = 1
def handler(tag, attrib_in, event=event_name, append=append,
start=self._start):
append((event, start(tag, attrib_in)))

View File

@ -0,0 +1,3 @@
Make the pure Python implementation of :mod:`xml.etree.ElementTree` behave
the same as the C implementation (:mod:`_elementree`) regarding default
attribute values (by not setting ``specified_attributes=1``).