Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion libs/iovm/source/IoDate.c
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ IO_METHOD(IoDate, setDay) {
} else {
IOASSERT(v >= 1 && v <= 28, "day must be within range 1-28");
}
} else if (month == 11) {
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
IOASSERT(v >= 1 && v <= 30, "day must be within range 1-30");
} else if (month == 12) {
IOASSERT(v >= 1 && v <= 31, "day must be within range 1-31");
Expand Down
11 changes: 11 additions & 0 deletions libs/iovm/tests/correctness/DateTest.io
Original file line number Diff line number Diff line change
Expand Up @@ -79,5 +79,16 @@ DateTest := UnitTest clone do(
//testString("%x") #%x is locale dependent
testString("%y")
)

// Regression: setDay must reject day 31 in 30-day months (Apr/Jun/Sep/Nov).
// Previously only November was checked; April/June/September could accept 31 incorrectly.
testSetDayThirtyDayMonths := method(
assertRaisesException(Date clone setMonth(4) setDay(31))
assertRaisesException(Date clone setMonth(6) setDay(31))
assertRaisesException(Date clone setMonth(9) setDay(31))
assertRaisesException(Date clone setMonth(11) setDay(31))
)
)

if(isLaunchScript, DateTest run, DateTest)