Skip to content

Commit 572ab68

Browse files
Williangalvanijaxxzer
authored andcommitted
pingmessage: don't crash when receiving unknown messages
1 parent d834eb5 commit 572ab68

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

brping/pingmessage.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,9 @@ def __init__(self, msg_id=0, msg_data=None):
8888
# Constructor 1: make a pingmessage object from a binary data buffer
8989
# (for receiving + unpacking)
9090
if msg_data is not None:
91-
self.unpack_msg_data(msg_data)
91+
if not self.unpack_msg_data(msg_data):
92+
# Attempted to create an unknown message
93+
return
9294
# Constructor 2: make a pingmessage object cooresponding to a message
9395
# id, with field members ready to access and populate
9496
# (for packing + transmitting)
@@ -150,7 +152,8 @@ def pack_msg_data(self):
150152

151153
return self.msg_data
152154

153-
## Unpack a bytearray into object attributes
155+
## Attempts to unpack a bytearray into object attributes
156+
# @Returns True if successful, False otherwise
154157
def unpack_msg_data(self, msg_data):
155158
self.msg_data = msg_data
156159

@@ -161,7 +164,11 @@ def unpack_msg_data(self, msg_data):
161164
setattr(self, attr, header[i])
162165

163166
## The name of this message
164-
self.name = payload_dict[self.message_id]["name"]
167+
try:
168+
self.name = payload_dict[self.message_id]["name"]
169+
except KeyError:
170+
print("Unknown message: ", self.message_id)
171+
return False
165172

166173
## The field names of this message
167174
self.payload_field_names = payload_dict[self.message_id]["field_names"]
@@ -190,6 +197,7 @@ def unpack_msg_data(self, msg_data):
190197

191198
# Extract checksum
192199
self.checksum = struct.unpack(PingMessage.endianess + PingMessage.checksum_format, self.msg_data[PingMessage.headerLength + self.payload_length: PingMessage.headerLength + self.payload_length + PingMessage.checksumLength])[0]
200+
return True
193201

194202
## Calculate the checksum from the internal bytearray self.msg_data
195203
def calculate_checksum(self):

0 commit comments

Comments
 (0)