summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEzio Melotti <ezio.melotti@gmail.com>2012-09-21 14:26:35 (GMT)
committerEzio Melotti <ezio.melotti@gmail.com>2012-09-21 14:26:35 (GMT)
commitcadff70ba5a761e5899d09c918ad6c87cfb07b7d (patch)
tree811aaa4a285ff38a745fa8d323047eff835b0fa5
parent003014bf1e7efcfcad19bd391b206e111ea21083 (diff)
downloadcpython-cadff70ba5a761e5899d09c918ad6c87cfb07b7d.zip
cpython-cadff70ba5a761e5899d09c918ad6c87cfb07b7d.tar.gz
cpython-cadff70ba5a761e5899d09c918ad6c87cfb07b7d.tar.bz2
#15421: fix an OverflowError in Calendar.itermonthdates() after datetime.MAXYEAR. Patch by Cédric Krier.
-rw-r--r--Lib/calendar.py6
-rw-r--r--Lib/test/test_calendar.py6
-rw-r--r--Misc/NEWS3
3 files changed, 14 insertions, 1 deletions
diff --git a/Lib/calendar.py b/Lib/calendar.py
index 3106ef2..2329578 100644
--- a/Lib/calendar.py
+++ b/Lib/calendar.py
@@ -161,7 +161,11 @@ class Calendar(object):
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 2a56268..5d6549c 100644
--- a/Lib/test/test_calendar.py
+++ b/Lib/test/test_calendar.py
@@ -3,6 +3,7 @@ import unittest
from test import test_support
import locale
+import datetime
result_2004_text = """
@@ -262,6 +263,11 @@ class CalendarTestCase(unittest.TestCase):
new_october = calendar.TextCalendar().formatmonthname(2010, 10, 10)
self.assertEquals(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):
diff --git a/Misc/NEWS b/Misc/NEWS
index e734998..84d4bd1 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -103,6 +103,9 @@ Core and Builtins
Library
-------
+- Issue #15421: fix an OverflowError in Calendar.itermonthdates() after
+ datetime.MAXYEAR. Patch by Cédric Krier.
+
- Issue #15970: xml.etree.ElementTree now serializes correctly the empty HTML
elements 'meta' and 'param'.