From 5e921453240b2d1be6a85c2dbaa35b5f1b1493c4 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Wed, 18 Jun 2025 16:41:43 -0500 Subject: [PATCH] Ensure incoming hostMetrics userstring is null terminated (#7068) * Ensure incoming hostMetrics userstring is null terminated * Only null terminate user_string when has_user_string is true --- src/modules/Telemetry/HostMetrics.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/modules/Telemetry/HostMetrics.cpp b/src/modules/Telemetry/HostMetrics.cpp index 2ac8cd03f..b53932deb 100644 --- a/src/modules/Telemetry/HostMetrics.cpp +++ b/src/modules/Telemetry/HostMetrics.cpp @@ -29,6 +29,8 @@ bool HostMetricsModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, if (t->which_variant == meshtastic_Telemetry_host_metrics_tag) { #ifdef DEBUG_PORT const char *sender = getSenderShortName(mp); + if (t->variant.host_metrics.has_user_string) + t->variant.host_metrics.user_string[sizeof(t->variant.host_metrics.user_string) - 1] = '\0'; LOG_INFO("(Received Host Metrics from %s): uptime=%u, diskfree=%lu, memory free=%lu, load=%04.2f, %04.2f, %04.2f, %s", sender, t->variant.host_metrics.uptime_seconds, t->variant.host_metrics.diskfree1_bytes, @@ -112,7 +114,7 @@ meshtastic_Telemetry HostMetricsModule::getHostMetrics() std::string userCommandResult = exec(settingsStrings[hostMetrics_user_command].c_str()); if (userCommandResult.length() > 1) { strncpy(t.variant.host_metrics.user_string, userCommandResult.c_str(), sizeof(t.variant.host_metrics.user_string)); - t.variant.host_metrics.user_string[ sizeof(t.variant.host_metrics.user_string) - 1] = '\0'; + t.variant.host_metrics.user_string[sizeof(t.variant.host_metrics.user_string) - 1] = '\0'; t.variant.host_metrics.has_user_string = true; } }