From 0452b1423c508224ad81eeb73927187629b35faa Mon Sep 17 00:00:00 2001 From: Martin Flaska Date: Thu, 19 Jun 2025 14:52:10 +0200 Subject: [PATCH] btmgmt_protocol: Fix unhandled exception when decoding EIRData ValueError: 0 is not a valid ADType Signed-off-by: Martin Flaska --- btsocket/btmgmt_protocol.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/btsocket/btmgmt_protocol.py b/btsocket/btmgmt_protocol.py index 32b2fb1..6829f82 100644 --- a/btsocket/btmgmt_protocol.py +++ b/btsocket/btmgmt_protocol.py @@ -194,7 +194,11 @@ def decode(self, data): data_type = data[pointer + 1] data_start = pointer + 2 data_end = data_start + len_data - 1 - self.value[ADType(data_type)] = data[data_start:data_end] + try: + self.value[ADType(data_type)] = data[data_start:data_end] + except ValueError as ex: + raise ValueError(f"EIRData.decode: Invalid ADType: 0x{data_type:02x}, " + f"data len: {len(data)}, data: {data[pointer:].hex(' ')}") from ex pointer += data[pointer] + 1 def encode(self, value, width): @@ -235,8 +239,14 @@ def decode(self, pkt): for index in range(repeated): class_ = getattr(current_module, param.bt_type) data_type = class_() - data_type.decode(pkt[pointer:pointer + param.width]) - self._add_to_value(param, data_type.value) + try: + data_type.decode(pkt[pointer:pointer + param.width]) + self._add_to_value(param, data_type.value) + except ValueError as ex: + logger.error( + f"Packet.decode: failed to decode {param.name} as {param.bt_type}. " + f"Offset: {pointer}, width: {param.width}, pkt: {pkt.hex(' ')}. Error: {ex}" + ) pointer += param.width if pointer < len(pkt): # self.value['parameters'] = pkt[pointer:]