Skip to content

Commit 8d696f3

Browse files
Add validation for JSON field values.
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
1 parent be08a47 commit 8d696f3

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

wled00/schedule.cpp

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,31 @@ bool loadSchedule() {
9696
for (JsonObject e : doc.as<JsonArray>()) {
9797
if (numScheduleEvents >= MAX_SCHEDULE_EVENTS) break;
9898

99+
// Extract and validate JSON fields before assignment
100+
int sm = e["sm"].as<int>();
101+
int sd = e["sd"].as<int>();
102+
int em = e["em"].as<int>();
103+
int ed = e["ed"].as<int>();
104+
int r = e["r"].as<int>();
105+
int h = e["h"].as<int>();
106+
int m = e["m"].as<int>();
107+
int p = e["p"].as<int>();
108+
109+
// Validate ranges: months 1–12, days 1–31, hours 0–23, minutes 0–59,
110+
// repeat mask 0–127, preset ID 1–250
111+
if (sm < 1 || sm > 12 || em < 1 || em > 12 ||
112+
sd < 1 || sd > 31 || ed < 1 || ed > 31 ||
113+
h < 0 || h > 23 || m < 0 || m > 59 ||
114+
r < 0 || r > 127|| p < 1 || p > 250) {
115+
DEBUG_PRINTF_P(PSTR("[Schedule] Invalid values in event %u, skipping\n"), numScheduleEvents);
116+
continue;
117+
}
118+
99119
scheduleEvents[numScheduleEvents++] = {
100-
(uint8_t)e["sm"].as<int>(), (uint8_t)e["sd"].as<int>(), // start month, day
101-
(uint8_t)e["em"].as<int>(), (uint8_t)e["ed"].as<int>(), // end month, day
102-
(uint8_t)e["r"].as<int>(), (uint8_t)e["h"].as<int>(), // repeat mask, hour
103-
(uint8_t)e["m"].as<int>(), (uint8_t)e["p"].as<int>() // minute, preset
120+
(uint8_t)sm, (uint8_t)sd,
121+
(uint8_t)em, (uint8_t)ed,
122+
(uint8_t)r, (uint8_t)h,
123+
(uint8_t)m, (uint8_t)p
104124
};
105125
}
106126

0 commit comments

Comments
 (0)