mirror of
https://github.com/ansible/awx.git
synced 2026-07-06 13:58:05 -02:30
[Devel] Reject RRULE with INTERVAL=0 to Prevent Scheduler Hang (#16464)
* added interval null rrule check and updated tests * Added secondly to the expected errors
This commit is contained in:
@@ -5450,7 +5450,11 @@ class SchedulePreviewSerializer(BaseSerializer):
|
|||||||
for a_rule in match_multiple_rrule:
|
for a_rule in match_multiple_rrule:
|
||||||
if 'interval' not in a_rule.lower():
|
if 'interval' not in a_rule.lower():
|
||||||
errors.append("{0}: {1}".format(_('INTERVAL required in rrule'), a_rule))
|
errors.append("{0}: {1}".format(_('INTERVAL required in rrule'), a_rule))
|
||||||
elif 'secondly' in a_rule.lower():
|
else:
|
||||||
|
match_interval = re.match(r".*?INTERVAL=([0-9]+)", a_rule)
|
||||||
|
if match_interval and int(match_interval.group(1)) < 1:
|
||||||
|
errors.append("{0}: {1}".format(_("INTERVAL must be a positive integer"), a_rule))
|
||||||
|
if 'secondly' in a_rule.lower():
|
||||||
errors.append("{0}: {1}".format(_('SECONDLY is not supported'), a_rule))
|
errors.append("{0}: {1}".format(_('SECONDLY is not supported'), a_rule))
|
||||||
if re.match(by_day_with_numeric_prefix, a_rule):
|
if re.match(by_day_with_numeric_prefix, a_rule):
|
||||||
errors.append("{0}: {1}".format(_("BYDAY with numeric prefix not supported"), a_rule))
|
errors.append("{0}: {1}".format(_("BYDAY with numeric prefix not supported"), a_rule))
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ def test_survey_password_default(post, patch, admin_user, project, inventory, su
|
|||||||
("DTSTART:20300308T050000Z", "One or more rule required in rrule"),
|
("DTSTART:20300308T050000Z", "One or more rule required in rrule"),
|
||||||
("DTSTART:20300308T050000Z RRULE:FREQ=MONTHLY;INTERVAL=1; EXDATE:20220401", "EXDATE not allowed in rrule"),
|
("DTSTART:20300308T050000Z RRULE:FREQ=MONTHLY;INTERVAL=1; EXDATE:20220401", "EXDATE not allowed in rrule"),
|
||||||
("DTSTART:20300308T050000Z RRULE:FREQ=MONTHLY;INTERVAL=1; RDATE:20220401", "RDATE not allowed in rrule"),
|
("DTSTART:20300308T050000Z RRULE:FREQ=MONTHLY;INTERVAL=1; RDATE:20220401", "RDATE not allowed in rrule"),
|
||||||
|
("DTSTART:20300308T050000Z RRULE:FREQ=YEARLY;INTERVAL=0;BYDAY=MO", "INTERVAL must be a positive integer"),
|
||||||
("DTSTART:20300308T050000Z RRULE:FREQ=SECONDLY;INTERVAL=5;COUNT=6", "SECONDLY is not supported"),
|
("DTSTART:20300308T050000Z RRULE:FREQ=SECONDLY;INTERVAL=5;COUNT=6", "SECONDLY is not supported"),
|
||||||
# Individual rule test
|
# Individual rule test
|
||||||
("DTSTART:20300308T050000Z RRULE:NONSENSE", "INTERVAL required in rrule"),
|
("DTSTART:20300308T050000Z RRULE:NONSENSE", "INTERVAL required in rrule"),
|
||||||
@@ -202,6 +203,7 @@ def test_multiple_invalid_rrules(post, admin_user, project, inventory):
|
|||||||
"rrule": [
|
"rrule": [
|
||||||
"Multiple DTSTART is not supported.",
|
"Multiple DTSTART is not supported.",
|
||||||
"INTERVAL required in rrule: RULE:FREQ=SECONDLY",
|
"INTERVAL required in rrule: RULE:FREQ=SECONDLY",
|
||||||
|
"SECONDLY is not supported: RULE:FREQ=SECONDLY",
|
||||||
"RRULE may not contain both COUNT and UNTIL: RULE:FREQ=MINUTELY;INTERVAL=10;COUNT=5;UNTIL=20220101",
|
"RRULE may not contain both COUNT and UNTIL: RULE:FREQ=MINUTELY;INTERVAL=10;COUNT=5;UNTIL=20220101",
|
||||||
"rrule parsing failed validation: 'NoneType' object has no attribute 'group'",
|
"rrule parsing failed validation: 'NoneType' object has no attribute 'group'",
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user