From 44e155931b6c647dfc5e36d45200b50d42a3c63e Mon Sep 17 00:00:00 2001 From: Penghui Cui Date: Tue, 28 Sep 2021 13:47:19 +0800 Subject: [PATCH] add check to avoid exception and add some fields Change-Id: Ie8cde288de3af96f4c68f837595afd5ad3b60520 --- pyghmi/ipmi/fru.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pyghmi/ipmi/fru.py b/pyghmi/ipmi/fru.py index 3cfa1b81..0c344531 100644 --- a/pyghmi/ipmi/fru.py +++ b/pyghmi/ipmi/fru.py @@ -174,10 +174,11 @@ class FRU(object): continue elif 'error' in response: raise iexc.IpmiException(response['error'], response['code']) - self.rawfru.extend(response['data'][1:]) offset += response['data'][0] if response['data'][0] == 0: break + # move down to avoid exception when data[0] is zero + self.rawfru.extend(response['data'][1:]) if offset + chunksize > frusize: chunksize = frusize - offset @@ -268,7 +269,9 @@ class FRU(object): raise iexc.BmcErrorException("Invalid/Unsupported chassis area") inf = self.info # ignore length field, just process the data - inf['Chassis type'] = enclosure_types[self.databytes[offset + 2]] + # add check to avoid exception + if self.databytes[offset + 2] in enclosure_types.keys(): + inf['Chassis type'] = enclosure_types[self.databytes[offset + 2]] inf['Chassis part number'], offset = self._decode_tlv(offset + 3) inf['Chassis serial number'], offset = self._decode_tlv(offset) inf['chassis_extra'] = [] @@ -278,7 +281,9 @@ class FRU(object): try: while self.databytes[offset] != 0xc1: fielddata, offset = self._decode_tlv(offset, language) - target.append(fielddata) + # add check to avoid exception + if fielddata: + target.append(fielddata) except IndexError: # If we overrun the end due to malformed FRU, # return at least what decoded right @@ -315,7 +320,7 @@ class FRU(object): inf['Hardware Version'], offset = self._decode_tlv(offset, language) inf['Serial Number'], offset = self._decode_tlv(offset, language) inf['Asset Number'], offset = self._decode_tlv(offset, language) - _, offset = self._decode_tlv(offset, language) + inf['FRU ID'], offset = self._decode_tlv(offset, language) inf['product_extra'] = [] self.extract_extra(inf['product_extra'], offset, language)