Skip to content

Commit 5867493

Browse files
committed
Check range of Record Number in reponse also
1 parent f619b8f commit 5867493

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

test/client/test_read_dtc_information.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from udsoncan import DidCodec
22
from udsoncan.exceptions import *
3+
from udsoncan.services import ReadDTCInformation
34

45
from test.ClientServerTest import ClientServerTest
5-
from udsoncan import Dtc
6+
from udsoncan import Dtc, Response
67
import struct
78
from udsoncan.configs import latest_standard
89

@@ -1092,7 +1093,7 @@ def test_single_snapshot_zeropadding_notok_exception(self): # Example provided i
10921093
self.wait_request_and_respond(data + b'\x00' * (i + 2))
10931094

10941095
def _test_single_snapshot_zeropadding_notok_exception(self):
1095-
for i in range (6):
1096+
for i in range(6):
10961097
with self.assertRaises(InvalidResponseException):
10971098
self.udsclient.get_dtc_snapshot_by_record_number(record_number=0)
10981099

@@ -1106,7 +1107,7 @@ def test_single_snapshot_zeropadding_notok_no_exception(self): # Example provide
11061107

11071108
def _test_single_snapshot_zeropadding_notok_no_exception(self):
11081109
self.udsclient.config['exception_on_invalid_response'] = False
1109-
for i in range (6):
1110+
for i in range(6):
11101111
response = self.udsclient.get_dtc_snapshot_by_record_number(record_number=0)
11111112
self.assertFalse(response.valid)
11121113

@@ -1186,11 +1187,11 @@ def _test_invalid_length_incomplete_dtc_exception(self):
11861187
with self.assertRaises(InvalidResponseException):
11871188
self.udsclient.get_dtc_snapshot_by_record_number(record_number=0x02)
11881189

1189-
def test_invalid_length_incomplete_dtc_exception(self):
1190+
def test_invalid_length_incomplete_dtc_no_exception(self):
11901191
self.wait_request_and_respond(b'\x59\x05\x02\x12')
11911192
self.wait_request_and_respond(b'\x59\x05\x02\x12\x34')
11921193

1193-
def _test_invalid_length_incomplete_dtc_exception(self):
1194+
def _test_invalid_length_incomplete_dtc_no_exception(self):
11941195
self.udsclient.config['exception_on_invalid_response'] = False
11951196
for i in range(2):
11961197
response = self.udsclient.get_dtc_snapshot_by_record_number(record_number=0x02)
@@ -2849,6 +2850,16 @@ def _test_wrong_record_number_response_exception(self):
28492850
with self.assertRaises(UnexpectedResponseException):
28502851
self.udsclient.get_dtc_extended_data_by_record_number(record_number = 0x33, data_size = {0x123456 : 5, 0x789abc : 3})
28512852

2853+
def test_record_number_out_of_range_response_exception(self):
2854+
pass
2855+
2856+
def _test_record_number_out_of_range_response_exception(self):
2857+
response = Response(service = ReadDTCInformation, code = Response.Code.PositiveResponse, data = self.sb + b'\xF0\x12\x34\x56\x20\x01\x02\x03\x04\x05')
2858+
2859+
with self.assertRaises(InvalidResponseException):
2860+
# Do not go thourgh the client because out of range would raised at request time.
2861+
ReadDTCInformation.interpret_response(response, ReadDTCInformation.Subfunction.reportDTCExtDataRecordByRecordNumber, extended_data_size={0x123456 : 5})
2862+
28522863
def test_duplicate_dtc(self):
28532864
self.wait_request_and_respond(b'\x59' + self.sb + b'\x33\x12\x34\x56\x20\x01\x02\x03\x04\x05\x12\x34\x56\x20\x01\x02\x03\x04\x05')
28542865

udsoncan/services/ReadDTCInformation.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,8 @@ def interpret_response(cls, response, subfunction, extended_data_size=None, tol
717717
raise InvalidResponseException(response, 'Incomplete response from server. Missing DTCExtDataRecordNumber')
718718

719719
record_number = int(response.data[1])
720+
if record_number > 0xEF:
721+
raise InvalidResponseException(response, 'Server returned a RecordNumber of %d which is out of range (00-EF) according to ISO-14229:2020', record_number)
720722

721723
actual_byte = 2
722724
received_dtcs = set()

0 commit comments

Comments
 (0)