From 4ab9cd7cf286abebf0fdb56746ba64c0a5bacb74 Mon Sep 17 00:00:00 2001 From: Alex Vandiver Date: Fri, 5 Jan 2024 14:38:08 +0000 Subject: [PATCH] markdown: Prevent OverflowError with large time integers. `` causes a "signed integer is greater than maximum" exception from dateutil.parser; datetime also cannot handle it ("year 41091 is out of range") but that is a ValueError which is already caught. Catch the OverflowError thrown by dateutil. --- zerver/lib/markdown/__init__.py | 2 +- zerver/tests/fixtures/markdown_test_cases.json | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/zerver/lib/markdown/__init__.py b/zerver/lib/markdown/__init__.py index b3ff0cd630..68ef2acad4 100644 --- a/zerver/lib/markdown/__init__.py +++ b/zerver/lib/markdown/__init__.py @@ -1395,7 +1395,7 @@ class Timestamp(markdown.inlinepatterns.Pattern): time_input_string = match.group("time") try: timestamp = dateutil.parser.parse(time_input_string, tzinfos=common_timezones) - except ValueError: + except (ValueError, OverflowError): try: timestamp = datetime.fromtimestamp(float(time_input_string), tz=timezone.utc) except ValueError: diff --git a/zerver/tests/fixtures/markdown_test_cases.json b/zerver/tests/fixtures/markdown_test_cases.json index eeb95214dc..e2ba52b97f 100644 --- a/zerver/tests/fixtures/markdown_test_cases.json +++ b/zerver/tests/fixtures/markdown_test_cases.json @@ -844,6 +844,13 @@ "expected_output": "

Let's meet at .

", "text_content": "Let's meet at 1496701800." }, + { + "name": "timestamp_unix_overflow", + "input": "Let's meet at .", + "expected_output": "

Let's meet at Invalid time format: 1234567890123.

", + "marked_expected_output": "

Let's meet at .

", + "text_content": "Let's meet at Invalid time format: 1234567890123." + }, { "name": "tex_inline", "input": "$$1 \\oplus 0 = 1$$",