From 7464ce6e6ec152835850c4c40a5087c9b5bbfdf4 Mon Sep 17 00:00:00 2001 From: MarekSpodBiedry <73122968+MarekSpodBiedry@users.noreply.github.com> Date: Mon, 12 Oct 2026 08:30:28 +0200 Subject: [PATCH] Return an error when a weekday fill runs past the supported dates (#535) --- crates/engine/src/fill.rs | 5 ++++- crates/engine/src/tests.rs | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/crates/engine/src/fill.rs b/crates/engine/src/fill.rs index 9e0c970..9f24e00 100644 --- a/crates/engine/src/fill.rs +++ b/crates/engine/src/fill.rs @@ -350,7 +350,10 @@ pub fn series(cx: &mut Ctx, sheet: usize, r: RangeRef, rows: bool, kind: &str, s let mut left = step.abs() as i64; while left > 0 { n += step.signum(); - if datetime_from_serial(sys, n).is_some_and(|d| d.weekday != 0 && d.weekday != 6) { + let Some(day) = datetime_from_serial(sys, n) else { + return Err(crate::EngineError::Other("The weekday series runs past the supported date range.".into())); + }; + if day.weekday != 0 && day.weekday != 6 { left -= 1; } } diff --git a/crates/engine/src/tests.rs b/crates/engine/src/tests.rs index 33fdc11..ef3e09a 100644 --- a/crates/engine/src/tests.rs +++ b/crates/engine/src/tests.rs @@ -2505,6 +2505,15 @@ fn fill_series_month_clamps_to_month_end() { assert_eq!(v(&s, "A4"), ymd(2026, 4, 15)); } +#[test] +fn fill_series_weekday_out_of_range_step_errors() { + let mut s = s(); + s.execute("cell.set", json!({"cell": "A1", "input": "45000"})).unwrap(); + let r = s.execute("edit.fillSeries", json!({"range": "A1:A2", "direction": "columns", "type": "date", "dateUnit": "weekday", "step": 1e12})); + assert!(r.is_err()); + assert_eq!(v(&s, "A2"), Value::Empty); +} + #[test] fn fill_series_month_leap_year() { let s = series_date("2028-01-31", "A1:A3", "month");