From af25a31861b41c4ce54a101541ff530b406b9a33 Mon Sep 17 00:00:00 2001 From: James <12959316+joshanne@users.noreply.github.com> Date: Tue, 24 Feb 2026 12:47:38 +1100 Subject: [PATCH] uavcannode: Fix VCS Version Reporting in Node Info for UAVCAN Nodes (#26567) long is a 32-bit signed integer, which means the maximum it will hold is 0x7FFFFFFF. strtol is overflowing, resulting in clamping the value to LONG_MAX (or 0x7FFFFFFF) and returns that instead. Fixes by using strtoul, which corrects the returned value. Can be tested by building a UAVCAN Node on the tag v1.16.1, flashing and checking the value displayed in dronecan_gui_tool. Screenshot added for convenience. --- src/drivers/uavcan/uavcan_main.cpp | 2 +- src/drivers/uavcannode/UavcanNode.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/drivers/uavcan/uavcan_main.cpp b/src/drivers/uavcan/uavcan_main.cpp index 956f5f4193..37b6f0cce9 100644 --- a/src/drivers/uavcan/uavcan_main.cpp +++ b/src/drivers/uavcan/uavcan_main.cpp @@ -468,7 +468,7 @@ UavcanNode::fill_node_info() char fw_git_short[9] = {}; std::memmove(fw_git_short, px4_firmware_version_string(), 8); char *end = nullptr; - swver.vcs_commit = std::strtol(fw_git_short, &end, 16); + swver.vcs_commit = std::strtoul(fw_git_short, &end, 16); swver.optional_field_flags |= swver.OPTIONAL_FIELD_FLAG_VCS_COMMIT; // Too verbose for normal operation diff --git a/src/drivers/uavcannode/UavcanNode.cpp b/src/drivers/uavcannode/UavcanNode.cpp index 0940791c90..711c88ab88 100644 --- a/src/drivers/uavcannode/UavcanNode.cpp +++ b/src/drivers/uavcannode/UavcanNode.cpp @@ -284,7 +284,7 @@ void UavcanNode::fill_node_info() char fw_git_short[9] = {}; std::memmove(fw_git_short, px4_firmware_version_string(), 8); char *end = nullptr; - swver.vcs_commit = std::strtol(fw_git_short, &end, 16); + swver.vcs_commit = std::strtoul(fw_git_short, &end, 16); swver.optional_field_flags |= swver.OPTIONAL_FIELD_FLAG_VCS_COMMIT; swver.major = AppDescriptor.major_version; swver.minor = AppDescriptor.minor_version;