From 194cf31425c9759a0a579fdc36f75889f4e4ee92 Mon Sep 17 00:00:00 2001 From: gpotter2 <10530980+gpotter2@users.noreply.github.com> Date: Fri, 28 Aug 2026 17:01:43 +0200 Subject: [PATCH] xcp: proper fix AI-Assisted: no --- scapy/contrib/automotive/xcp/cto_commands_slave.py | 2 +- scapy/contrib/automotive/xcp/xcp.py | 12 ++++++++++++ test/contrib/automotive/xcp/xcp.uts | 8 -------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/scapy/contrib/automotive/xcp/cto_commands_slave.py b/scapy/contrib/automotive/xcp/cto_commands_slave.py index e4bcc1d4798..20e042d73aa 100644 --- a/scapy/contrib/automotive/xcp/cto_commands_slave.py +++ b/scapy/contrib/automotive/xcp/cto_commands_slave.py @@ -85,7 +85,7 @@ def post_dissection(self, pkt): conf.contribs["XCP"][ "Address_Granularity_Byte"] = self.get_address_granularity() - if conf.contribs["XCP"]["allow_cto_and_dto_change"] and self.max_cto != 0: + if conf.contribs["XCP"]["allow_cto_and_dto_change"]: conf.contribs["XCP"]["MAX_CTO"] = self.max_cto conf.contribs["XCP"]["MAX_DTO"] = self.max_dto or self.max_dto_le diff --git a/scapy/contrib/automotive/xcp/xcp.py b/scapy/contrib/automotive/xcp/xcp.py index dcadac43894..d724154f256 100644 --- a/scapy/contrib/automotive/xcp/xcp.py +++ b/scapy/contrib/automotive/xcp/xcp.py @@ -6,6 +6,18 @@ # scapy.contrib.description = Universal calibration and measurement protocol (XCP) # noqa: E501 # scapy.contrib.status = loads + +""" +Universal calibration and measurement protocol (XCP) + +When using this module, one must at least define the following values: + + >>> # These are example values, please change them to your setup. + >>> conf.contribs["XCP"]["MAX_CTO"] = 255 + >>> conf.contribs["XCP"]["MAX_DTO"] = 65535 + >>> conf.contribs["XCP"]["Address_Granularity_Byte"] = 4 +""" + import struct from scapy.config import conf diff --git a/test/contrib/automotive/xcp/xcp.uts b/test/contrib/automotive/xcp/xcp.uts index 279df4aced2..499977d247f 100644 --- a/test/contrib/automotive/xcp/xcp.uts +++ b/test/contrib/automotive/xcp/xcp.uts @@ -12,14 +12,6 @@ load_layer("can", globals_dict=globals()) conf.contribs['CAN']['swap-bytes'] = False load_contrib("automotive.xcp.xcp", globals_dict=globals()) -= Reject a zero MAX_CTO response before changing state -conf.contribs["XCP"]["MAX_CTO"] = None -request = CTORequest()/Connect() -response = CTOResponse(bytes.fromhex("ffff000000000101")) -assert not response.answers(request) -assert conf.contribs["XCP"]["MAX_CTO"] is None - - = Test padding conf.contribs["XCP"]["add_padding_for_can"] = True