diff options
Diffstat (limited to 'gems/gitlab-utils/lib/gitlab/version_info.rb')
-rw-r--r-- | gems/gitlab-utils/lib/gitlab/version_info.rb | 12 |
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) |