From 974ac5c731f77433b83429df8e0a0b113d696989 Mon Sep 17 00:00:00 2001 From: Rami Abdelrazzaq Date: Sat, 12 Sep 2026 21:03:01 -0500 Subject: [PATCH 1/2] Handle date parser overflow errors --- sqlite_utils/recipes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sqlite_utils/recipes.py b/sqlite_utils/recipes.py index d28a099b5..ba0572054 100644 --- a/sqlite_utils/recipes.py +++ b/sqlite_utils/recipes.py @@ -31,7 +31,7 @@ def parsedate( .date() .isoformat() ) - except parser.ParserError: + except (parser.ParserError, OverflowError): if errors is IGNORE: return value elif errors is SET_NULL: @@ -58,7 +58,7 @@ def parsedatetime( return value try: return parser.parse(value, dayfirst=dayfirst, yearfirst=yearfirst).isoformat() - except parser.ParserError: + except (parser.ParserError, OverflowError): if errors is IGNORE: return value elif errors is SET_NULL: From 9e6460701224dd0c2ada7feacd4f745f55741dbc Mon Sep 17 00:00:00 2001 From: Rami Abdelrazzaq Date: Sat, 12 Sep 2026 21:03:08 -0500 Subject: [PATCH 2/2] Add regression tests for date parser overflow --- tests/test_recipe_overflow.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 tests/test_recipe_overflow.py diff --git a/tests/test_recipe_overflow.py b/tests/test_recipe_overflow.py new file mode 100644 index 000000000..0d920eb2c --- /dev/null +++ b/tests/test_recipe_overflow.py @@ -0,0 +1,24 @@ +import pytest + +from sqlite_utils import recipes + + +OVERFLOWING_DATE = "999999999999999999999999999999-01-01" + + +@pytest.mark.parametrize("fn", ("parsedate", "parsedatetime")) +def test_dateparse_overflow_raises_by_default(fn): + with pytest.raises(OverflowError): + getattr(recipes, fn)(OVERFLOWING_DATE) + + +@pytest.mark.parametrize("fn", ("parsedate", "parsedatetime")) +@pytest.mark.parametrize( + "errors,expected", + ( + (recipes.IGNORE, OVERFLOWING_DATE), + (recipes.SET_NULL, None), + ), +) +def test_dateparse_overflow_respects_errors(fn, errors, expected): + assert getattr(recipes, fn)(OVERFLOWING_DATE, errors=errors) == expected