From efe584e219d6ef407f6f0526298813b674687cd7 Mon Sep 17 00:00:00 2001 From: Petru Paler Date: Sat, 17 Jun 2023 04:32:01 +0000 Subject: [PATCH 1/2] Correct comment description of the field order. --- program.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/program.h b/program.h index 30daf4cc..2de37e1c 100644 --- a/program.h +++ b/program.h @@ -80,7 +80,7 @@ class ProgramStruct { // weekly: days[0][0..6] correspond to Monday till Sunday // bi-weekly:days[0][0..6] and [1][0..6] store two weeks // monthly: days[0][0..5] stores the day of the month (32 means last day of month) - // interval: days[0] stores the interval (0 to 255), days[1] stores the starting day remainder (0 to 254) + // interval: days[1] stores the interval (0 to 255), days[0] stores the starting day remainder (0 to 254) byte days[2]; // When the program is a fixed start time type: From 756218b1230ab33de8b836d99ff1d9cdb232dbc7 Mon Sep 17 00:00:00 2001 From: Petru Paler Date: Sat, 17 Jun 2023 04:42:03 +0000 Subject: [PATCH 2/2] Disallow zero intervals when changing programs. --- opensprinkler_server.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/opensprinkler_server.cpp b/opensprinkler_server.cpp index 3494a289..2b272b0c 100644 --- a/opensprinkler_server.cpp +++ b/opensprinkler_server.cpp @@ -902,6 +902,15 @@ void server_change_program(OTF_PARAMS_DEF) { *(char*)(&prog) = parse_listdata(&pv); prog.days[0]= parse_listdata(&pv); prog.days[1]= parse_listdata(&pv); + + if (prog.type == PROGRAM_TYPE_INTERVAL) { + if (prog.days[1] == 0) handle_return(HTML_DATA_OUTOFBOUND) + else if (prog.days[1] >= 1) { + // process interval day remainder (relative-> absolute) + pd.drem_to_absolute(prog.days); + } + } + // parse start times pv++; // this should be a '[' for (i=0;i absolute) - if (prog.type == PROGRAM_TYPE_INTERVAL && prog.days[1] >= 1) { - pd.drem_to_absolute(prog.days); - } - if (pid==-1) { if(!pd.add(&prog)) handle_return(HTML_DATA_OUTOFBOUND); } else {