From d22209cb428ecb083548fd21cae714a60c7fd5f7 Mon Sep 17 00:00:00 2001
From: Jure Slak <jure.slak@gmail.com>
Date: Mon, 20 Mar 2023 22:42:18 +0100
Subject: [PATCH] Fixed #34424 -- Fixed SelectDateWidget crash for inputs
 raising OverflowError.

---
 django/forms/widgets.py                              |  2 ++
 tests/forms_tests/field_tests/test_datefield.py      | 12 ++++++++++++
 .../widget_tests/test_selectdatewidget.py            |  2 ++
 3 files changed, 16 insertions(+)

diff --git a/django/forms/widgets.py b/django/forms/widgets.py
index 842b73e95c..3d6091c250 100644
--- a/django/forms/widgets.py
+++ b/django/forms/widgets.py
@@ -1161,6 +1161,8 @@ class SelectDateWidget(Widget):
                 # Return pseudo-ISO dates with zeros for any unselected values,
                 # e.g. '2017-0-23'.
                 return "%s-%s-%s" % (y or 0, m or 0, d or 0)
+            except OverflowError:
+                return "0-0-0"
             return date_value.strftime(input_format)
         return data.get(name)
 
diff --git a/tests/forms_tests/field_tests/test_datefield.py b/tests/forms_tests/field_tests/test_datefield.py
index 60c8043be3..65ac76319d 100644
--- a/tests/forms_tests/field_tests/test_datefield.py
+++ b/tests/forms_tests/field_tests/test_datefield.py
@@ -1,3 +1,4 @@
+import sys
 from datetime import date, datetime
 
 from django.core.exceptions import ValidationError
@@ -36,6 +37,17 @@ class DateFieldTest(SimpleTestCase):
         d = GetDate({"mydate_month": "1", "mydate_day": "1", "mydate_year": "2010"})
         self.assertIn('<label for="id_mydate_month">', d.as_p())
 
+        # Inputs raising an OverflowError.
+        e = GetDate(
+            {
+                "mydate_month": str(sys.maxsize + 1),
+                "mydate_day": "31",
+                "mydate_year": "2010",
+            }
+        )
+        self.assertIs(e.is_valid(), False)
+        self.assertEqual(e.errors, {"mydate": ["Enter a valid date."]})
+
     @translation.override("nl")
     def test_l10n_date_changed(self):
         """
diff --git a/tests/forms_tests/widget_tests/test_selectdatewidget.py b/tests/forms_tests/widget_tests/test_selectdatewidget.py
index cfcd037987..215c41a809 100644
--- a/tests/forms_tests/widget_tests/test_selectdatewidget.py
+++ b/tests/forms_tests/widget_tests/test_selectdatewidget.py
@@ -1,3 +1,4 @@
+import sys
 from datetime import date
 
 from django.forms import DateField, Form, SelectDateWidget
@@ -610,6 +611,7 @@ class SelectDateWidgetTest(WidgetTest):
             ((None, "12", "1"), None),
             (("2000", None, "1"), None),
             (("2000", "12", None), None),
+            ((str(sys.maxsize + 1), "12", "1"), "0-0-0"),
         ]
         for values, expected in tests:
             with self.subTest(values=values):