Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'gems/gitlab-utils/lib/gitlab/version_info.rb')
-rw-r--r--gems/gitlab-utils/lib/gitlab/version_info.rb12
1 files changed, 12 insertions, 0 deletions
diff --git a/gems/gitlab-utils/lib/gitlab/version_info.rb b/gems/gitlab-utils/lib/gitlab/version_info.rb
index 00a9b4ddc6e..21478c46259 100644
--- a/gems/gitlab-utils/lib/gitlab/version_info.rb
+++ b/gems/gitlab-utils/lib/gitlab/version_info.rb
@@ -7,10 +7,22 @@ module Gitlab
attr_reader :major, :minor, :patch
VERSION_REGEX = /(\d+)\.(\d+)\.(\d+)/
+ MILESTONE_REGEX = /\A(\d+)\.(\d+)\z/
# To mitigate ReDoS, limit the length of the version string we're
# willing to check
MAX_VERSION_LENGTH = 128
+ InvalidMilestoneError = Class.new(StandardError)
+
+ def self.parse_from_milestone(str)
+ raise InvalidMilestoneError if str.length > MAX_VERSION_LENGTH
+
+ m = MILESTONE_REGEX.match(str)
+ raise InvalidMilestoneError if m.nil?
+
+ VersionInfo.new(m[1].to_i, m[2].to_i)
+ end
+
def self.parse(str, parse_suffix: false)
return str if str.is_a?(self)