@@ -73,15 +73,13 @@ def parse_frame(self, frame):
7373
7474 # check for valid size
7575
76- # TODO: lookup this limit
77- # if len(raw_bytes) < 9:
78- # debug("Dropped frame for being too short")
79- # return False
76+ if len (raw_bytes ) < 5 :
77+ debug ("Dropped frame for being too short" )
78+ return False
8079
81- # TODO: lookup this limit
82- # if len(raw_bytes) > 16:
83- # debug("Dropped frame for being too long")
84- # return False
80+ if len (raw_bytes ) > 12 :
81+ debug ("Dropped frame for being too long" )
82+ return False
8583
8684
8785 # read header information
@@ -133,14 +131,26 @@ def parse_frame(self, frame):
133131 # v
134132 # 00 00 07 E8 06 41 00 BE 7F B8 13
135133 frame .data_len = frame .data [0 ] & 0x0F
134+
135+ # drop frames with no data
136+ if frame .data_len == 0 :
137+ return False
138+
136139 elif frame .type == self .FRAME_TYPE_FF :
137140 # First frames have 12 bit length codes
138- # v
139- # 00 00 07 E8 06 41 00 BE 7F B8 13
141+ # v vv
142+ # 00 00 07 E8 10 20 49 04 00 01 02 03
140143 frame .data_len = (frame .data [0 ] & 0x0F ) << 8
141144 frame .data_len += frame .data [1 ]
145+
146+ # drop frames with no data
147+ if frame .data_len == 0 :
148+ return False
149+
142150 elif frame .type == self .FRAME_TYPE_CF :
143151 # Consecutive frames have 4 bit sequence indices
152+ # v
153+ # 00 00 07 E8 21 04 05 06 07 08 09 0A
144154 frame .seq_index = frame .data [0 ] & 0x0F
145155
146156 return True
0 commit comments