Skip to content

Commit c6f7368

Browse files
gh-148821: Add more tests for invalid XML encodings (GH-149820)
1 parent f1a47e7 commit c6f7368

1 file changed

Lines changed: 44 additions & 4 deletions

File tree

Lib/test/test_pyexpat.py

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ def test_parse_again(self):
289289
'mac-roman', 'mac-turkish',
290290
'koi8-r', 'koi8-t', 'koi8-u', 'kz1048', 'ptcp154',
291291
])
292-
def test_supported_ecodings(self, encoding):
292+
def test_supported_encodings(self, encoding):
293293
out = self.Outputter()
294294
parser = expat.ParserCreate()
295295
self._hookup_callbacks(parser, out)
@@ -308,7 +308,7 @@ def test_supported_ecodings(self, encoding):
308308
'UTF-8', 'utf-8', 'utf-16', 'utf-16le', 'utf-16be',
309309
'koi8-u', 'cp1125', 'cp1251', 'iso8859-5', 'mac-cyrillic',
310310
])
311-
def test_supported_ecodings2(self, encoding):
311+
def test_supported_encodings2(self, encoding):
312312
out = self.Outputter()
313313
parser = expat.ParserCreate()
314314
self._hookup_callbacks(parser, out)
@@ -334,14 +334,54 @@ def test_supported_ecodings2(self, encoding):
334334
"johab",
335335
"Shift_JIS", "Shift_JIS-2004", "Shift_JISX0213",
336336
])
337-
def test_unsupportes_ecodings(self, encoding):
337+
def test_unsupported_encodings(self, encoding):
338338
parser = expat.ParserCreate()
339339
data = (f'<?xml version="1.0" encoding="{encoding}"?>\n'
340340
'<root></root>').encode(encoding)
341341
with self.assertRaises(ValueError):
342342
parser.Parse(data, True)
343343

344-
def test_unknown_ecoding(self):
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_encodings(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_encodings(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_encoding(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+
384+
def test_unknown_encoding(self):
345385
parser = expat.ParserCreate()
346386
data = b'<?xml version="1.0" encoding="xyz"?>\n<root></root>'
347387
with self.assertRaises(LookupError):

0 commit comments

Comments
 (0)