From d2464ff52bb479697ae03ac2e591e9e37213cee5 Mon Sep 17 00:00:00 2001 From: Alex Vandiver Date: Fri, 6 Dec 2024 14:38:44 +0000 Subject: [PATCH] markdown: Catch OverflowErrors in global times. This also matches the except in the block above. --- web/src/markdown.ts | 4 ++-- zerver/lib/markdown/__init__.py | 2 +- zerver/tests/fixtures/markdown_test_cases.json | 7 +++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/web/src/markdown.ts b/web/src/markdown.ts index 1e2b544555..074d4a5588 100644 --- a/web/src/markdown.ts +++ b/web/src/markdown.ts @@ -1,4 +1,4 @@ -import {isValid} from "date-fns"; +import {getUnixTime, isValid} from "date-fns"; import katex from "katex"; import _ from "lodash"; import assert from "minimalistic-assert"; @@ -580,7 +580,7 @@ function handleTimestamp(time_string: string): string { } const escaped_time = _.escape(time_string); - if (!isValid(timeobject)) { + if (!isValid(timeobject) || getUnixTime(timeobject) < 0) { // Unsupported time format: rerender accordingly. // We do not show an error on these formats in local echo because diff --git a/zerver/lib/markdown/__init__.py b/zerver/lib/markdown/__init__.py index bffebd7634..b8a7e61ee0 100644 --- a/zerver/lib/markdown/__init__.py +++ b/zerver/lib/markdown/__init__.py @@ -1455,7 +1455,7 @@ class Timestamp(markdown.inlinepatterns.Pattern): if timestamp.tzinfo: try: timestamp = timestamp.astimezone(timezone.utc) - except ValueError: + except (ValueError, OverflowError): error_element = Element("span") error_element.set("class", "timestamp-error") error_element.text = markdown.util.AtomicString( diff --git a/zerver/tests/fixtures/markdown_test_cases.json b/zerver/tests/fixtures/markdown_test_cases.json index e3707b8b86..7cdc47cfe6 100644 --- a/zerver/tests/fixtures/markdown_test_cases.json +++ b/zerver/tests/fixtures/markdown_test_cases.json @@ -845,6 +845,13 @@ "marked_expected_output": "

1969-12-31T00:00:00+32:00

", "text_content": "Invalid time format: 1969-12-31T00:00:00+32:00" }, + { + "name": "timestamp_overflow", + "input": "", + "expected_output": "

Invalid time format: 0001-01-01T01:00:00+02:00

", + "marked_expected_output": "

0001-01-01T01:00:00+02:00

", + "text_content": "Invalid time format: 0001-01-01T01:00:00+02:00" + }, { "name": "timestamp_unix", "input": "Let's meet at .",