Proper handling of invalid text input in scheduled dispatch

This commit is contained in:
innocenat
2017-06-08 13:09:17 +07:00
parent 02b53a2f52
commit c4c891a6c1

View File

@@ -473,9 +473,10 @@ struct SchdispatchWindow : Window {
default: NOT_REACHED(); default: NOT_REACHED();
case WID_SCHDISPATCH_ADD: { case WID_SCHDISPATCH_ADD: {
int32 val = StrEmpty(str) ? -1 : strtoul(str, NULL, 10); char *end;
int32 val = StrEmpty(str) ? -1 : strtoul(str, &end, 10);
if (val >= 0) { if (val >= 0 && end && *end == 0) {
uint minutes = (val % 100) % 60; uint minutes = (val % 100) % 60;
uint hours = (val / 100) % 24; uint hours = (val / 100) % 24;
val = MINUTES_DATE(MINUTES_DAY(CURRENT_MINUTE), hours, minutes); val = MINUTES_DATE(MINUTES_DAY(CURRENT_MINUTE), hours, minutes);
@@ -487,9 +488,10 @@ struct SchdispatchWindow : Window {
} }
case WID_SCHDISPATCH_SET_START_DATE: { case WID_SCHDISPATCH_SET_START_DATE: {
int32 val = StrEmpty(str) ? -1 : strtoul(str, NULL, 10); char *end;
int32 val = StrEmpty(str) ? -1 : strtoul(str, &end, 10);
if (val >= 0) { if (val >= 0 && end && *end == 0) {
uint minutes = (val % 100) % 60; uint minutes = (val % 100) % 60;
uint hours = (val / 100) % 24; uint hours = (val / 100) % 24;
val = MINUTES_DATE(MINUTES_DAY(CURRENT_MINUTE), hours, minutes); val = MINUTES_DATE(MINUTES_DAY(CURRENT_MINUTE), hours, minutes);
@@ -516,9 +518,10 @@ struct SchdispatchWindow : Window {
} }
case WID_SCHDISPATCH_SET_DELAY: { case WID_SCHDISPATCH_SET_DELAY: {
int32 val = StrEmpty(str) ? -1 : strtoul(str, NULL, 10); char *end;
int32 val = StrEmpty(str) ? -1 : strtoul(str, &end, 10);
if (val >= 0) { if (val >= 0 && end && *end == 0) {
if (_settings_client.gui.time_in_minutes) { if (_settings_client.gui.time_in_minutes) {
val *= _settings_client.gui.ticks_per_minute; val *= _settings_client.gui.ticks_per_minute;
} else { } else {