bpo-46811: Make test suite support Expat >=2.4.5 (GH-31453) (GH-31472)

Curly brackets were never allowed in namespace URIs
according to RFC 3986, and so-called namespace-validating
XML parsers have the right to reject them a invalid URIs.

libexpat >=2.4.5 has become strcter in that regard due to
related security issues; with ET.XML instantiating a
namespace-aware parser under the hood, this test has no
future in CPython.

References:
- https://datatracker.ietf.org/doc/html/rfc3968
- https://www.w3.org/TR/xml-names/

Also, test_minidom.py: Support Expat >=2.4.5
(cherry picked from commit 2cae93832f)

Co-authored-by: Sebastian Pipping <sebastian@pipping.org>
This commit is contained in:
Miss Islington (bot) 2022-02-21 08:16:09 -08:00 committed by GitHub
parent 633d0f90f9
commit 7da97f6181
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 8 deletions

View file

@ -6,10 +6,12 @@ import io
from test import support from test import support
import unittest import unittest
import pyexpat
import xml.dom.minidom import xml.dom.minidom
from xml.dom.minidom import parse, Node, Document, parseString from xml.dom.minidom import parse, Node, Document, parseString
from xml.dom.minidom import getDOMImplementation from xml.dom.minidom import getDOMImplementation
from xml.parsers.expat import ExpatError
tstfile = support.findfile("test.xml", subdir="xmltestdata") tstfile = support.findfile("test.xml", subdir="xmltestdata")
@ -1147,7 +1149,13 @@ class MinidomTest(unittest.TestCase):
# Verify that character decoding errors raise exceptions instead # Verify that character decoding errors raise exceptions instead
# of crashing # of crashing
self.assertRaises(UnicodeDecodeError, parseString, if pyexpat.version_info >= (2, 4, 5):
self.assertRaises(ExpatError, parseString,
b'<fran\xe7ais></fran\xe7ais>')
self.assertRaises(ExpatError, parseString,
b'<franais>Comment \xe7a va ? Tr\xe8s bien ?</franais>')
else:
self.assertRaises(UnicodeDecodeError, parseString,
b'<fran\xe7ais>Comment \xe7a va ? Tr\xe8s bien ?</fran\xe7ais>') b'<fran\xe7ais>Comment \xe7a va ? Tr\xe8s bien ?</fran\xe7ais>')
doc.unlink() doc.unlink()
@ -1609,7 +1617,12 @@ class MinidomTest(unittest.TestCase):
self.confirm(doc2.namespaceURI == xml.dom.EMPTY_NAMESPACE) self.confirm(doc2.namespaceURI == xml.dom.EMPTY_NAMESPACE)
def testExceptionOnSpacesInXMLNSValue(self): def testExceptionOnSpacesInXMLNSValue(self):
with self.assertRaisesRegex(ValueError, 'Unsupported syntax'): if pyexpat.version_info >= (2, 4, 5):
context = self.assertRaisesRegex(ExpatError, 'syntax error')
else:
context = self.assertRaisesRegex(ValueError, 'Unsupported syntax')
with context:
parseString('<element xmlns:abc="http:abc.com/de f g/hi/j k"><abc:foo /></element>') parseString('<element xmlns:abc="http:abc.com/de f g/hi/j k"><abc:foo /></element>')
def testDocRemoveChild(self): def testDocRemoveChild(self):

View file

@ -2192,12 +2192,6 @@ class BugsTest(unittest.TestCase):
b"<?xml version='1.0' encoding='ascii'?>\n" b"<?xml version='1.0' encoding='ascii'?>\n"
b'<body>t&#227;g</body>') b'<body>t&#227;g</body>')
def test_issue3151(self):
e = ET.XML('<prefix:localname xmlns:prefix="${stuff}"/>')
self.assertEqual(e.tag, '{${stuff}}localname')
t = ET.ElementTree(e)
self.assertEqual(ET.tostring(e), b'<ns0:localname xmlns:ns0="${stuff}" />')
def test_issue6565(self): def test_issue6565(self):
elem = ET.XML("<body><tag/></body>") elem = ET.XML("<body><tag/></body>")
self.assertEqual(summarize_list(elem), ['tag']) self.assertEqual(summarize_list(elem), ['tag'])

View file

@ -0,0 +1 @@
Make test suite support Expat >=2.4.5