From df1f8270bb880a2895f49c30f515909aeeb9f895 Mon Sep 17 00:00:00 2001 From: norulers Date: Fri, 10 Jul 2026 11:40:01 +0800 Subject: [PATCH] fix(hwgen): prevent prefix collisions when resolving source names (#7533) --- radio/src/analogs.cpp | 3 ++- radio/src/hal/adc_driver.cpp | 3 ++- radio/src/switches.cpp | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/radio/src/analogs.cpp b/radio/src/analogs.cpp index e07e550dc..4cf669e90 100644 --- a/radio/src/analogs.cpp +++ b/radio/src/analogs.cpp @@ -56,7 +56,8 @@ static int _lookup_input_idx(uint8_t type, const char* name, size_t len, if (!max_inputs) return -1; for (uint8_t i = 0; i < max_inputs; i++) { - if (!strncmp(fct(type, i), name, len)) return i; + const char* input_name = fct(type, i); + if (strlen(input_name) == len && !strncmp(input_name, name, len)) return i; } return -1; diff --git a/radio/src/hal/adc_driver.cpp b/radio/src/hal/adc_driver.cpp index 3a396f94d..e140ac904 100644 --- a/radio/src/hal/adc_driver.cpp +++ b/radio/src/hal/adc_driver.cpp @@ -549,7 +549,8 @@ int adcGetInputIdx(const char* input, uint8_t len) do { for (uint8_t i = 0; i < _hal_adc_inputs[type].n_inputs; i++, idx++) { - if (!strncmp(_hal_adc_inputs[type].inputs[i].name, input, len)) + const char* input_name = _hal_adc_inputs[type].inputs[i].name; + if (strlen(input_name) == len && !strncmp(input_name, input, len)) return idx; } } while (++type < ADC_INPUT_ALL); diff --git a/radio/src/switches.cpp b/radio/src/switches.cpp index 8f7327ef7..d6a72355d 100644 --- a/radio/src/switches.cpp +++ b/radio/src/switches.cpp @@ -308,7 +308,7 @@ int switchLookupIdx(const char* name, size_t len) auto max_switches = switchGetMaxAllSwitches(); for (int i = 0; i < max_switches; i++) { const char *sw_name = switchGetDefaultName(i); - if (strncmp(sw_name, name, len) == 0) return i; + if (strlen(sw_name) == len && strncmp(sw_name, name, len) == 0) return i; } return -1;