#15421: fix an OverflowError in Calendar.itermonthdates() after datetime.MAXYEAR.  Patch by Cédric Krier.
diff --git a/Lib/calendar.py b/Lib/calendar.py
index 0301d6b..3bbf399 100644
--- a/Lib/calendar.py
+++ b/Lib/calendar.py
@@ -161,7 +161,11 @@
         oneday = datetime.timedelta(days=1)
         while True:
             yield date
-            date += oneday
+            try:
+                date += oneday
+            except OverflowError:
+                # Adding one day could fail after datetime.MAXYEAR
+                break
             if date.month != month and date.weekday() == self.firstweekday:
                 break
 
diff --git a/Lib/test/test_calendar.py b/Lib/test/test_calendar.py
index d3093ac..948a119 100644
--- a/Lib/test/test_calendar.py
+++ b/Lib/test/test_calendar.py
@@ -5,6 +5,7 @@
 from test.script_helper import assert_python_ok
 import time
 import locale
+import datetime
 
 result_2004_text = """
                                   2004
@@ -265,6 +266,11 @@
         new_october = calendar.TextCalendar().formatmonthname(2010, 10, 10)
         self.assertEqual(old_october, new_october)
 
+    def test_itermonthdates(self):
+        # ensure itermonthdates doesn't overflow after datetime.MAXYEAR
+        # see #15421
+        list(calendar.Calendar().itermonthdates(datetime.MAXYEAR, 12))
+
 
 class MonthCalendarTestCase(unittest.TestCase):
     def setUp(self):