From c64ef213e4bb25ca0fada3bc312ea2fa7e91cd11 Mon Sep 17 00:00:00 2001 From: Mika Cohen Date: Mon, 13 Jul 2026 15:12:53 -0600 Subject: [PATCH 1/3] LCM: Bound name reads --- src/lcm.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/lcm.c b/src/lcm.c index deabcd2e..06581528 100644 --- a/src/lcm.c +++ b/src/lcm.c @@ -66,13 +66,11 @@ void lcm_poll_request(LcmData *lcm, uint8_t *buffer, size_t len) { // Optionally pass in LCM name and version in a single string if (len > 0) { - for (size_t i = 0; i < MAX_LCM_NAME_LENGTH; i++) { - if (i > len || i > MAX_LCM_NAME_LENGTH - 1 || buffer[i] == '\0') { - lcm->name[i] = '\0'; - break; - } + size_t name_len = min(len, sizeof(lcm->name) - 1); + for (size_t i = 0; i < name_len; ++i) { lcm->name[i] = buffer[i]; } + lcm->name[name_len] = '\0'; } } From ec374756dcbca432e34b54ae3a998ebea0a987b3 Mon Sep 17 00:00:00 2001 From: Mika Cohen Date: Mon, 13 Jul 2026 15:12:53 -0600 Subject: [PATCH 2/3] LCM: Limit brightness to 100 --- src/lcm.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lcm.c b/src/lcm.c index 06581528..00ae7dd9 100644 --- a/src/lcm.c +++ b/src/lcm.c @@ -196,9 +196,9 @@ void lcm_light_ctrl_request(LcmData *lcm, unsigned char *cfg, int len) { int32_t idx = 0; - lcm->brightness = cfg[idx++]; - lcm->brightness_idle = cfg[idx++]; - lcm->status_brightness = cfg[idx++]; + lcm->brightness = min(cfg[idx++], 100u); + lcm->brightness_idle = min(cfg[idx++], 100u); + lcm->status_brightness = min(cfg[idx++], 100u); if (len > 3) { if (lcm->enabled) { From cc193b29dc601bec78a030a4fb28115b98b8df4f Mon Sep 17 00:00:00 2001 From: Mika Cohen Date: Tue, 14 Jul 2026 14:39:04 -0600 Subject: [PATCH 3/3] LCM: Bound and clear payloads --- src/lcm.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/lcm.c b/src/lcm.c index 00ae7dd9..e1975bcf 100644 --- a/src/lcm.c +++ b/src/lcm.c @@ -194,6 +194,7 @@ void lcm_light_ctrl_request(LcmData *lcm, unsigned char *cfg, int len) { return; } + lcm->payload_size = 0; int32_t idx = 0; lcm->brightness = min(cfg[idx++], 100u); @@ -201,18 +202,9 @@ void lcm_light_ctrl_request(LcmData *lcm, unsigned char *cfg, int len) { lcm->status_brightness = min(cfg[idx++], 100u); if (len > 3) { - if (lcm->enabled) { - // Copy rest of payload into data for LCM to pull - lcm->payload_size = len - idx; - for (int i = 0; i < lcm->payload_size; i++) { - lcm->payload[i] = cfg[idx + i]; - } - } else { - if (len > 5) { - // d->float_conf.led_mode = cfg[idx++]; - // d->float_conf.led_mode_idle = cfg[idx++]; - // d->float_conf.led_status_mode = cfg[idx++]; - } + lcm->payload_size = min(len - idx, MAX_LCM_PAYLOAD_LENGTH); + for (int i = 0; i < lcm->payload_size; i++) { + lcm->payload[i] = cfg[idx + i]; } } }