Class: Gitlab::UntrustedRegexp::RubySyntax
- Inherits:
-
Object
- Object
- Gitlab::UntrustedRegexp::RubySyntax
- Defined in:
- lib/gitlab/untrusted_regexp/ruby_syntax.rb
Overview
This class implements support for Ruby syntax of regexps and converts that to RE2 representation: /<regexp>/<flags>
Constant Summary collapse
- PATTERN =
%r{^/(?<regexp>.*)/(?<flags>[ismU]*)$}
Class Method Summary collapse
- .fabricate(pattern, project: nil) ⇒ Object
- .fabricate!(pattern, project: nil) ⇒ Object
-
.matches_syntax?(pattern) ⇒ Boolean
Checks if pattern matches a regexp pattern but does not enforce it’s validity.
-
.valid?(pattern) ⇒ Boolean
The regexp can match the pattern ‘/…/`, but may not be fabricatable: it can be invalid or incomplete: `/match ( string/`.
Class Method Details
.fabricate(pattern, project: nil) ⇒ Object
23 24 25 26 27 |
# File 'lib/gitlab/untrusted_regexp/ruby_syntax.rb', line 23 def self.fabricate(pattern, project: nil) self.fabricate!(pattern, project: project) rescue RegexpError nil end |
.fabricate!(pattern, project: nil) ⇒ Object
29 30 31 32 33 34 35 36 |
# File 'lib/gitlab/untrusted_regexp/ruby_syntax.rb', line 29 def self.fabricate!(pattern, project: nil) raise RegexpError, 'Pattern is not string!' unless pattern.is_a?(String) matches = pattern.match(PATTERN) raise RegexpError, 'Invalid regular expression!' if matches.nil? create_untrusted_regexp(matches[:regexp], matches[:flags]) end |
.matches_syntax?(pattern) ⇒ Boolean
Checks if pattern matches a regexp pattern but does not enforce it’s validity
13 14 15 |
# File 'lib/gitlab/untrusted_regexp/ruby_syntax.rb', line 13 def self.matches_syntax?(pattern) pattern.is_a?(String) && pattern.match(PATTERN).present? end |
.valid?(pattern) ⇒ Boolean
The regexp can match the pattern ‘/…/`, but may not be fabricatable: it can be invalid or incomplete: `/match ( string/`
19 20 21 |
# File 'lib/gitlab/untrusted_regexp/ruby_syntax.rb', line 19 def self.valid?(pattern) !!self.fabricate(pattern) end |