1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 20:27:45 +00:00

LibJS+LibC: Add tests for Date tuple ctor overflow and make mktime()/timegm() handle month overflow

This commit is contained in:
Nico Weber 2020-08-23 21:37:03 -04:00 committed by Andreas Kling
parent 465d46c665
commit 84f729c2b4
3 changed files with 27 additions and 3 deletions

View file

@ -103,6 +103,13 @@ static void time_to_tm(struct tm* tm, time_t t)
static time_t tm_to_time(struct tm* tm, long timezone_adjust_seconds)
{
tm->tm_year += tm->tm_mon / 12;
tm->tm_mon %= 12;
if (tm->tm_mon < 0) {
tm->tm_year--;
tm->tm_mon += 12;
}
int days = 0;
for (int year = 70; year < tm->tm_year; ++year)
days += 365 + __is_leap_year(1900 + year);
@ -110,7 +117,6 @@ static time_t tm_to_time(struct tm* tm, long timezone_adjust_seconds)
days -= 365 + __is_leap_year(1900 + year);
tm->tm_yday = tm->tm_mday - 1;
// FIXME: What if tm->tm_mon < 0 or tm->tm_mon > 12?
for (int month = 0; month < tm->tm_mon; ++month)
tm->tm_yday += __days_per_month[month];
if (tm->tm_mon > 1 && __is_leap_year(1900 + tm->tm_year))