Skip to content

Commit 522c9ba

Browse files
committed
btmgmt_protocol: Fix unhandled exception when decoding EIRData
ValueError: 0 is not a valid ADType Signed-off-by: Martin Flaska <extern-mfl@mission-embedded.com>
1 parent e1f8d0c commit 522c9ba

2 files changed

Lines changed: 335 additions & 3 deletions

File tree

btsocket/btmgmt_protocol.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,11 @@ def decode(self, data):
194194
data_type = data[pointer + 1]
195195
data_start = pointer + 2
196196
data_end = data_start + len_data - 1
197-
self.value[ADType(data_type)] = data[data_start:data_end]
197+
try:
198+
self.value[ADType(data_type)] = data[data_start:data_end]
199+
except ValueError as ex:
200+
raise ValueError(f"EIRData.decode: Invalid ADType: 0x{data_type:02x}, "
201+
f"data len: {len(data)}, data: {data[pointer:].hex(' ')}") from ex
198202
pointer += data[pointer] + 1
199203

200204
def encode(self, value, width):
@@ -235,8 +239,14 @@ def decode(self, pkt):
235239
for index in range(repeated):
236240
class_ = getattr(current_module, param.bt_type)
237241
data_type = class_()
238-
data_type.decode(pkt[pointer:pointer + param.width])
239-
self._add_to_value(param, data_type.value)
242+
try:
243+
data_type.decode(pkt[pointer:pointer + param.width])
244+
self._add_to_value(param, data_type.value)
245+
except ValueError as ex:
246+
logger.error(
247+
f"Packet.decode: failed to decode {param.name} as {param.bt_type}. "
248+
f"Offset: {pointer}, width: {param.width}, pkt: {pkt.hex(' ')}. Error: {ex}"
249+
)
240250
pointer += param.width
241251
if pointer < len(pkt):
242252
# self.value['parameters'] = pkt[pointer:]

0 commit comments

Comments
 (0)