From afac5284abe187a5d333a18da798887c02977d63 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 8 Apr 2025 18:17:50 -0400 Subject: [PATCH] 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 --- pyghmi/ipmi/oem/lenovo/config.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pyghmi/ipmi/oem/lenovo/config.py b/pyghmi/ipmi/oem/lenovo/config.py index 3a989ff8..0e897bc7 100644 --- a/pyghmi/ipmi/oem/lenovo/config.py +++ b/pyghmi/ipmi/oem/lenovo/config.py @@ -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):