From 92427da26a4c6a440cdc41af616133a9fe4e10e3 Mon Sep 17 00:00:00 2001 From: UA1ZBE Date: Wed, 22 Jul 2026 10:12:24 +0300 Subject: [PATCH] Fix canal parsing: replace sscanf with strchr --- src/main.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index a3f56fa..7075efc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -212,18 +212,21 @@ public: for (int j = 0; j < 20; j++) { sum += radio_driver.getCurrentRSSI(); delay(50); } char r[32]; snprintf(r, sizeof(r), "noise:%.0fdBm", sum / 20); defer_response(r); } else if (strncmp(cmd, "canal", 5) == 0) { - const char* rest = cmd + 5; while (*rest == ' ') rest++; - char cname[32], cpass[32]; - int n = sscanf(rest, "%31s %31s", cname, cpass); - if (n == 2) { - strncpy(g_channel_name, cname, sizeof(g_channel_name) - 1); - strncpy(g_channel_pass, cpass, sizeof(g_channel_pass) - 1); - saveChannelConfig(); - char r[64]; snprintf(r, sizeof(r), "canal %s %s ok", cname, cpass); - send_text(r); - delay(100); - NVIC_SystemReset(); - } else defer_response("canal name password"); + char buf[128]; strncpy(buf, cmd, sizeof(buf) - 1); buf[sizeof(buf) - 1] = 0; + char* rest = buf + 5; while (*rest == ' ') rest++; + char* cname = rest; + char* space = strchr(cname, ' '); + if (!space) { defer_response("need name and password"); return; } + *space = 0; + char* cpass = space + 1; + if (*cpass == 0) { defer_response("need name and password"); return; } + strncpy(g_channel_name, cname, sizeof(g_channel_name) - 1); + strncpy(g_channel_pass, cpass, sizeof(g_channel_pass) - 1); + saveChannelConfig(); + char r[64]; snprintf(r, sizeof(r), "canal %s %s ok", cname, cpass); + send_text(r); + for (int i = 0; i < 5; i++) { digitalWrite(PIN_LED_STATUS, HIGH); delay(100); digitalWrite(PIN_LED_STATUS, LOW); delay(100); } + NVIC_SystemReset(); } } };