Skip to content

Commit fe5740d

Browse files
author
Brendan Whitfield
committed
check length on CAN responses
1 parent 00787d1 commit fe5740d

1 file changed

Lines changed: 20 additions & 10 deletions

File tree

obd/protocols/protocol_can.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)