Skip to content

Commit e72e55d

Browse files
gh-148821: Add more tests for invalid XML encodings
1 parent f1a47e7 commit e72e55d

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

Lib/test/test_pyexpat.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,46 @@ def test_unsupportes_ecodings(self, encoding):
341341
with self.assertRaises(ValueError):
342342
parser.Parse(data, True)
343343

344+
parser = expat.ParserCreate()
345+
data = (f'<?xml version="1.0" encoding="{encoding}"?>\n'
346+
'<root></root>').encode()
347+
with self.assertRaises(ValueError):
348+
parser.Parse(data, True)
349+
350+
@support.subTests('encoding', [
351+
'cp037', 'cp273', 'cp424', 'cp500', 'cp864', 'cp875',
352+
'cp1026', 'cp1140',
353+
'mac_arabic', 'mac_farsi',
354+
])
355+
def test_incompatible_ecodings(self, encoding):
356+
parser = expat.ParserCreate()
357+
data = (f'<?xml version="1.0" encoding="{encoding}"?>\n'
358+
'<root></root>').encode(encoding)
359+
with self.assertRaises(expat.ExpatError):
360+
parser.Parse(data, True)
361+
362+
parser = expat.ParserCreate()
363+
data = (f'<?xml version="1.0" encoding="{encoding}"?>\n'
364+
'<root></root>').encode()
365+
with self.assertRaisesRegex(expat.ExpatError, 'unknown encoding'):
366+
parser.Parse(data, True)
367+
368+
@support.subTests('encoding', [
369+
'hex_codec', 'rot_13',
370+
])
371+
def test_non_text_ecodings(self, encoding):
372+
parser = expat.ParserCreate()
373+
data = (f'<?xml version="1.0" encoding="{encoding}"?>\n'
374+
'<root></root>').encode()
375+
with self.assertRaises(LookupError):
376+
parser.Parse(data, True)
377+
378+
def test_undefined_ecoding(self):
379+
parser = expat.ParserCreate()
380+
data = b'<?xml version="1.0" encoding="undefined"?>\n<root></root>'
381+
with self.assertRaises(UnicodeError):
382+
parser.Parse(data, True)
383+
344384
def test_unknown_ecoding(self):
345385
parser = expat.ParserCreate()
346386
data = b'<?xml version="1.0" encoding="xyz"?>\n<root></root>'

0 commit comments

Comments
 (0)