From 6fba1c22dcf8b19b8e6155b6ff3b42acb012be0f Mon Sep 17 00:00:00 2001 From: Fabio Pitino Date: Thu, 2 May 2019 13:29:51 +0100 Subject: Rescue RuntimeError when "too many loops" are reached by Fugit::Cron --- lib/gitlab/ci/cron_parser.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/gitlab/ci/cron_parser.rb b/lib/gitlab/ci/cron_parser.rb index 94f4a4e36c9..ae524654b7d 100644 --- a/lib/gitlab/ci/cron_parser.rb +++ b/lib/gitlab/ci/cron_parser.rb @@ -13,7 +13,7 @@ module Gitlab def next_time_from(time) @cron_line ||= try_parse_cron(@cron, @cron_timezone) - @cron_line.next_time(time).utc.in_time_zone(Time.zone) if @cron_line.present? + find_next_time(time) if @cron_line.present? end def cron_valid? @@ -49,6 +49,14 @@ module Gitlab def try_parse_cron(cron, cron_timezone) Fugit::Cron.parse("#{cron} #{cron_timezone}") end + + def find_next_time(time) + @cron_line.next_time(time).utc.in_time_zone(Time.zone) + rescue RuntimeError => error + raise error unless error.message =~ /too many loops/ + # Fugit::Cron raises a RuntimeError if :next_time does not find the next schedule + # given an invalid pattern - E.g. try_parse_cron('0 12 31 2 *') + end end end end -- cgit v1.2.1