diff options
| author | Adit Biswas <adit.biswas@grofers.com> | 2017-05-16 00:26:30 +0530 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2017-05-30 13:20:35 -0400 |
| commit | c2eea61dff44b16caab04928d582b856c2b8b615 (patch) | |
| tree | 087948b919470ac88e81d2b5e8c63af10a925f05 /django | |
| parent | c61d1361d027a729d07d277879950ff133c19f4c (diff) | |
Fixed #28209 -- Made date-based generic views return a 404 rather than crash when given an out of range date.
Diffstat (limited to 'django')
| -rw-r--r-- | django/views/generic/dates.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/django/views/generic/dates.py b/django/views/generic/dates.py index 2ec8aabf6a..3b55014e73 100644 --- a/django/views/generic/dates.py +++ b/django/views/generic/dates.py @@ -55,7 +55,10 @@ class YearMixin: The interval is defined by start date <= item date < next start date. """ - return date.replace(year=date.year + 1, month=1, day=1) + try: + return date.replace(year=date.year + 1, month=1, day=1) + except ValueError: + raise Http404(_("Date out of range")) def _get_current_year(self, date): """Return the start date of the current interval.""" @@ -102,7 +105,10 @@ class MonthMixin: The interval is defined by start date <= item date < next start date. """ if date.month == 12: - return date.replace(year=date.year + 1, month=1, day=1) + try: + return date.replace(year=date.year + 1, month=1, day=1) + except ValueError: + raise Http404(_("Date out of range")) else: return date.replace(month=date.month + 1, day=1) @@ -196,7 +202,10 @@ class WeekMixin: The interval is defined by start date <= item date < next start date. """ - return date + datetime.timedelta(days=7 - self._get_weekday(date)) + try: + return date + datetime.timedelta(days=7 - self._get_weekday(date)) + except OverflowError: + raise Http404(_("Date out of range")) def _get_current_week(self, date): """Return the start date of the current interval.""" |
