From 73a00804849564782653a25cdbbed9d9156d3747 Mon Sep 17 00:00:00 2001 From: ferkans-amir Date: Tue, 28 Jul 2026 11:43:39 +0200 Subject: [PATCH] fix(cron): validate expression syntax in _validate_schedule_for_add --- nanobot/cron/service.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/nanobot/cron/service.py b/nanobot/cron/service.py index 86f77f34a..b9833307c 100644 --- a/nanobot/cron/service.py +++ b/nanobot/cron/service.py @@ -75,13 +75,20 @@ def _validate_schedule_for_add(schedule: CronSchedule) -> None: if schedule.tz and schedule.kind != "cron": raise ValueError("tz can only be used with cron schedules") - if schedule.kind == "cron" and schedule.tz: + if schedule.kind == "cron": + if not schedule.expr or not schedule.expr.strip(): + raise ValueError("cron schedule requires a non-empty 'expr'") try: - from zoneinfo import ZoneInfo - - ZoneInfo(schedule.tz) - except Exception: - raise ValueError(f"unknown timezone '{schedule.tz}'") from None + from croniter import croniter + croniter(schedule.expr) + except Exception as e: + raise ValueError(f"invalid cron expression '{schedule.expr}': {e}") from None + if schedule.tz: + try: + from zoneinfo import ZoneInfo + ZoneInfo(schedule.tz) + except Exception: + raise ValueError(f"unknown timezone '{schedule.tz}'") from None def _has_legacy_delivery_context(payload: CronPayload) -> bool: