From b438839fcc030b37ba852774acc29b7d3cbfd129 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Thu, 25 Aug 2022 21:49:28 +0100 Subject: [PATCH] LibJS: Reject ambiguous time string even with a calendar This is a normative change in the Temporal spec. See: https://github.com/tc39/proposal-temporal/commit/5e2afb9 --- .../LibJS/Runtime/Temporal/ISO8601.cpp | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/ISO8601.cpp b/Userland/Libraries/LibJS/Runtime/Temporal/ISO8601.cpp index d435b1e0b9..dcff49afc3 100644 --- a/Userland/Libraries/LibJS/Runtime/Temporal/ISO8601.cpp +++ b/Userland/Libraries/LibJS/Runtime/Temporal/ISO8601.cpp @@ -999,8 +999,7 @@ bool ISO8601Parser::parse_calendar_time() { // CalendarTime : // TimeDesignator TimeSpec TimeZone[opt] Calendar[opt] - // TimeSpec TimeZone[opt] Calendar - // TimeSpecWithOptionalTimeZoneNotAmbiguous + // TimeSpecWithOptionalTimeZoneNotAmbiguous Calendar[opt] { StateTransaction transaction { *this }; if (parse_time_designator() && parse_time_spec()) { @@ -1010,17 +1009,12 @@ bool ISO8601Parser::parse_calendar_time() return true; } } - { - StateTransaction transaction { *this }; - if (parse_time_spec()) { - (void)parse_time_zone(); - if (parse_calendar()) { - transaction.commit(); - return true; - } - } - } - return parse_time_spec_with_optional_time_zone_not_ambiguous(); + StateTransaction transaction { *this }; + if (!parse_time_spec_with_optional_time_zone_not_ambiguous()) + return false; + (void)parse_calendar(); + transaction.commit(); + return true; } // https://tc39.es/proposal-temporal/#prod-CalendarDateTime