From efda1724e8914c2193718a4a60ee9129a1a80018 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Sun, 16 Jan 2022 01:15:46 -0500 Subject: [PATCH] LibJS: Protect [TimeValue]FromTime from non-finite times Includes HourFromTime, MinFromTime, SecFromTime, msFromTime. --- Userland/Libraries/LibJS/Runtime/Date.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Userland/Libraries/LibJS/Runtime/Date.cpp b/Userland/Libraries/LibJS/Runtime/Date.cpp index fe1962676e..77c251350b 100644 --- a/Userland/Libraries/LibJS/Runtime/Date.cpp +++ b/Userland/Libraries/LibJS/Runtime/Date.cpp @@ -222,6 +222,9 @@ u8 month_from_time(double t) // HourFromTime(t), https://tc39.es/ecma262/#eqn-HourFromTime u8 hour_from_time(double t) { + if (!Value(t).is_finite_number()) + return 0; + // 𝔽(floor(ℝ(t / msPerHour)) modulo HoursPerDay) return static_cast(modulo(floor(t / Date::ms_per_hour), Date::hours_per_day)); } @@ -229,6 +232,9 @@ u8 hour_from_time(double t) // MinFromTime(t), https://tc39.es/ecma262/#eqn-MinFromTime u8 min_from_time(double t) { + if (!Value(t).is_finite_number()) + return 0; + // 𝔽(floor(ℝ(t / msPerMinute)) modulo MinutesPerHour) return static_cast(modulo(floor(t / Date::ms_per_minute), Date::minutes_per_hour)); } @@ -236,6 +242,9 @@ u8 min_from_time(double t) // SecFromTime(t), https://tc39.es/ecma262/#eqn-SecFromTime u8 sec_from_time(double t) { + if (!Value(t).is_finite_number()) + return 0; + // 𝔽(floor(ℝ(t / msPerSecond)) modulo SecondsPerMinute) return static_cast(modulo(floor(t / Date::ms_per_second), Date::seconds_per_minute)); } @@ -243,6 +252,9 @@ u8 sec_from_time(double t) // msFromTime(t), https://tc39.es/ecma262/#eqn-msFromTime u16 ms_from_time(double t) { + if (!Value(t).is_finite_number()) + return 0; + // 𝔽(ℝ(t) modulo msPerSecond) return static_cast(modulo(t, Date::ms_per_second)); } @@ -250,6 +262,9 @@ u16 ms_from_time(double t) // 21.4.1.6 Week Day, https://tc39.es/ecma262/#sec-week-day u8 week_day(double t) { + if (!Value(t).is_finite_number()) + return 0; + // 𝔽(ℝ(Day(t) + 4𝔽) modulo 7) return static_cast(modulo(day(t) + 4, 7)); }