diff --git a/dateparser/date.py b/dateparser/date.py index 094591707..6149f037d 100644 --- a/dateparser/date.py +++ b/dateparser/date.py @@ -77,6 +77,9 @@ def date_range(begin, end, **kwargs): step = relativedelta(**kwargs) if kwargs else relativedelta(days=1) date = begin + if date + step <= date: + raise ValueError("date_range step must be positive") + while date < end: yield date date += step diff --git a/tests/test_date.py b/tests/test_date.py index 7c8759b89..510ec4955 100644 --- a/tests/test_date.py +++ b/tests/test_date.py @@ -86,6 +86,16 @@ def test_should_reject_easily_mistaken_dateutil_arguments(self, invalid_period): ) self.then_period_was_rejected(invalid_period) + @parameterized.expand( + [ + param(step={"months": 0}), + param(step={"days": -1}), + ] + ) + def test_should_reject_steps_that_do_not_advance(self, step): + with pytest.raises(ValueError, match="date_range step must be positive"): + next(date.date_range(datetime(2014, 6, 15), datetime(2014, 6, 25), **step)) + def when_date_range_generated(self, begin, end, **size): try: self.result = list(date.date_range(begin, end, **size))