fix: reject COUNT rules without DTSTART so limited automations cannot run forever (#27781)
This commit is contained in:
2 files changed
+6
No files matched your search
@@ -118,6 +118,9 @@ class ERROR_MESSAGES(str, Enum):
|
|||||||
AUTOMATION_TOO_FREQUENT = lambda interval='': f'Schedule too frequent. Minimum interval is {interval} seconds.'
|
AUTOMATION_TOO_FREQUENT = lambda interval='': f'Schedule too frequent. Minimum interval is {interval} seconds.'
|
||||||
AUTOMATION_INVALID_RRULE = lambda err='': f'Invalid RRULE: {err}'
|
AUTOMATION_INVALID_RRULE = lambda err='': f'Invalid RRULE: {err}'
|
||||||
AUTOMATION_NO_FUTURE_RUNS = 'RRULE has no future occurrences'
|
AUTOMATION_NO_FUTURE_RUNS = 'RRULE has no future occurrences'
|
||||||
|
AUTOMATION_COUNT_REQUIRES_DTSTART = (
|
||||||
|
'RRULE with COUNT requires an explicit DTSTART line to anchor the occurrence window'
|
||||||
|
)
|
||||||
|
|
||||||
FEATURE_DISABLED = lambda name='': f'{name} is disabled'
|
FEATURE_DISABLED = lambda name='': f'{name} is disabled'
|
||||||
INPUT_TOO_LONG = lambda size='': f'Input prompt exceeds maximum length of {size}'
|
INPUT_TOO_LONG = lambda size='': f'Input prompt exceeds maximum length of {size}'
|
||||||
|
|||||||
@@ -124,6 +124,9 @@ def validate_rrule(s: str, tz: str = None) -> None:
|
|||||||
clock so that near-future schedules are not incorrectly rejected
|
clock so that near-future schedules are not incorrectly rejected
|
||||||
on servers whose system clock is ahead (e.g. UTC vs US timezones).
|
on servers whose system clock is ahead (e.g. UTC vs US timezones).
|
||||||
"""
|
"""
|
||||||
|
upper = s.upper()
|
||||||
|
if 'COUNT=' in upper and 'DTSTART' not in upper:
|
||||||
|
raise ValueError(ERROR_MESSAGES.AUTOMATION_COUNT_REQUIRES_DTSTART)
|
||||||
zi = _resolve_tz(tz)
|
zi = _resolve_tz(tz)
|
||||||
now = datetime.now(zi).replace(tzinfo=None) if zi else datetime.now()
|
now = datetime.now(zi).replace(tzinfo=None) if zi else datetime.now()
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in new issue
Block a user