diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/TimeZone.cpp b/Userland/Libraries/LibJS/Runtime/Temporal/TimeZone.cpp index 8372089c69..d6586b1dc8 100644 --- a/Userland/Libraries/LibJS/Runtime/Temporal/TimeZone.cpp +++ b/Userland/Libraries/LibJS/Runtime/Temporal/TimeZone.cpp @@ -230,7 +230,9 @@ static bool parse_time_zone_numeric_utc_offset_syntax(String const& offset_strin if (!lexer.consume_specific('.') && !lexer.consume_specific(',')) return false; fraction = lexer.consume_fractional_seconds(); - return fraction.has_value(); + if (!fraction.has_value()) + return false; + return !lexer.tell_remaining(); } bool is_valid_time_zone_numeric_utc_offset_syntax(String const& offset_string) diff --git a/Userland/Libraries/LibJS/Tests/builtins/Temporal/TimeZone/TimeZone.js b/Userland/Libraries/LibJS/Tests/builtins/Temporal/TimeZone/TimeZone.js index 7dffdef5eb..6d3e53babb 100644 --- a/Userland/Libraries/LibJS/Tests/builtins/Temporal/TimeZone/TimeZone.js +++ b/Userland/Libraries/LibJS/Tests/builtins/Temporal/TimeZone/TimeZone.js @@ -10,6 +10,16 @@ describe("errors", () => { new Temporal.TimeZone("foo"); }).toThrowWithMessage(RangeError, "Invalid time zone name 'foo'"); }); + + test("Invalid numeric UTC offset", () => { + // FIXME: Error message should probably say '...name or UTC offset ...' :^) + expect(() => { + new Temporal.TimeZone("0123456"); + }).toThrowWithMessage(RangeError, "Invalid time zone name '0123456'"); + expect(() => { + new Temporal.TimeZone("23:59:59.9999999999"); + }).toThrowWithMessage(RangeError, "Invalid time zone name '23:59:59.9999999999'"); + }); }); describe("normal behavior", () => {