From 6213c8038c2a5bd1428a25cfbe3380def896a71a Mon Sep 17 00:00:00 2001 From: Kevin Ness Date: Wed, 12 Nov 2025 17:35:35 -0600 Subject: [PATCH 1/2] Reject on empty fields object in PlainYearMonth::with --- src/builtins/core/plain_year_month.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/builtins/core/plain_year_month.rs b/src/builtins/core/plain_year_month.rs index c61d69ed7..b74462bce 100644 --- a/src/builtins/core/plain_year_month.rs +++ b/src/builtins/core/plain_year_month.rs @@ -542,6 +542,11 @@ impl PlainYearMonth { // 4. Let calendar be yearMonth.[[Calendar]]. // 5. Let fields be ISODateToFields(calendar, yearMonth.[[ISODate]], year-month). // 6. Let partialYearMonth be ? PrepareCalendarFields(calendar, temporalYearMonthLike, « year, month, month-code », « », partial). + if fields.is_empty() { + return Err( + TemporalError::r#type().with_message("plainYearMonth fields cannot be empty") + ); + } // 7. Set fields to CalendarMergeFields(calendar, fields, partialYearMonth). // 8. Let resolvedOptions be ? GetOptionsObject(options). // 9. Let overflow be ? GetTemporalOverflowOption(resolvedOptions). From 1771c5f7702b6fc505bd05a3ea3b8ebe9acceb3e Mon Sep 17 00:00:00 2001 From: Kevin Ness Date: Wed, 12 Nov 2025 17:51:47 -0600 Subject: [PATCH 2/2] Fix bad test not asserting empty YearMonthCalendarFields is an error --- src/builtins/core/plain_year_month.rs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/builtins/core/plain_year_month.rs b/src/builtins/core/plain_year_month.rs index b74462bce..1fbaa3b31 100644 --- a/src/builtins/core/plain_year_month.rs +++ b/src/builtins/core/plain_year_month.rs @@ -947,19 +947,17 @@ mod tests { ); // assert month code has changed assert_eq!(with_month_code.iso_month(), 5); // month is changed as well - // Day - let fields = YearMonthCalendarFields::new(); - let with_day = base.with(fields, None).unwrap(); - assert_eq!(with_day.iso_year(), 2025); // year is not changed - assert_eq!(with_day.iso_month(), 3); // month is not changed - assert_eq!(with_day.iso.day, 1); // day is ignored - // All let fields = YearMonthCalendarFields::new().with_year(2001).with_month(2); let with_all = base.with(fields, None).unwrap(); assert_eq!(with_all.iso_year(), 2001); // year is changed assert_eq!(with_all.iso_month(), 2); // month is changed assert_eq!(with_all.iso.day, 1); // day is ignored + + // Empty fields -> throws error + let fields = YearMonthCalendarFields::new(); + let empty = base.with(fields, None); + assert!(empty.is_err()); } #[test]