fix: consistent check order and explicit error reply on bad tokens in parseSweep

This commit is contained in:
2026-05-21 22:23:44 +02:00
parent 352d47ef59
commit f270e4b83f

View File

@@ -552,10 +552,11 @@ bool parseHome(const String& line) {
bool parseSweep(const String& line) {
int id; char accelTok[20], speedTok[20];
if (sscanf(line.c_str(), "SWEEP %d %19s %19s", &id, accelTok, speedTok) == 3) {
if (id < 0 || id >= GAUGE_COUNT) { sendReply("ERR BAD_ID"); return true; }
char* endA; float accel = (float)strtod(accelTok, &endA);
char* endS; float speed = (float)strtod(speedTok, &endS);
if (endA == accelTok || *endA != '\0' || endS == speedTok || *endS != '\0') return false;
if (endA == accelTok || *endA != '\0') { sendReply("ERR BAD_ACCEL"); return true; }
if (endS == speedTok || *endS != '\0') { sendReply("ERR BAD_SPEED"); return true; }
if (id < 0 || id >= GAUGE_COUNT) { sendReply("ERR BAD_ID"); return true; }
Gauge& g = gauges[id];
if (accel <= 0.0f || speed <= 0.0f) {
g.sweepEnabled = false;