Fallback to intense fixup of bad binary XML data

If the XML parser fails, attempt to replace binary data
to try again.

Change-Id: I659aec451b3ac596dc090c125939370bb251a62a
This commit is contained in:
Jarrod Johnson 2025-04-08 18:17:50 -04:00
parent 1a1e449965
commit afac5284ab

View File

@ -51,7 +51,16 @@ class Unsupported(Exception):
def fromstring(inputdata):
if b'!entity' in inputdata.lower():
raise Exception('Unsupported XML')
return etree.fromstring(inputdata)
try:
return etree.fromstring(inputdata)
except etree.XMLSyntaxError:
inputdata = bytearray(inputdata.decode('utf8', errors='backslashreplace').encode())
for i in range(len(inputdata)):
if inputdata[i] < 0x20 and inputdata[i] not in (9, 0xa, 0xd):
inputdata[i] = 63
inputdata = bytes(inputdata)
return etree.fromstring(inputdata)
def run_command_with_retry(connection, data):