diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-04-08 20:27:28 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-04-08 20:27:28 +0900 |
| commit | 292bffb32e7434b4725f39924adf0e9f8af5d1cf (patch) | |
| tree | b6d1298afce1b4acb7660db07779ed938984dfc5 /mrblib | |
| parent | ec1688807ef301483321919778b2ccb578822767 (diff) | |
| download | mruby-292bffb32e7434b4725f39924adf0e9f8af5d1cf.tar.gz mruby-292bffb32e7434b4725f39924adf0e9f8af5d1cf.zip | |
Avoid infinite loop when no `Regexp` class is available; fix #4363
Diffstat (limited to 'mrblib')
| -rw-r--r-- | mrblib/string.rb | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/mrblib/string.rb b/mrblib/string.rb index 64e85c5b6..62c925885 100644 --- a/mrblib/string.rb +++ b/mrblib/string.rb @@ -242,25 +242,27 @@ class String end end + def _regexp(re, mid) + if String === re + if Object.const_defined?(:Regexp) + return Regexp.new(re) + else + raise NotImplementedError, "String##{mid} needs Regexp class" + end + end + re + end + ## # ISO 15.2.10.5.3 def =~(re) - re =~ self + _regexp(re, :=~) =~ self end ## # ISO 15.2.10.5.27 def match(re, &block) - if String === re - if Object.const_defined?(:Regexp) - r = Regexp.new(re) - r.match(self, &block) - else - raise NotImplementedError, "String#match needs Regexp class" - end - else - re.match(self, &block) - end + _regexp(re, :match).match(self, &block) end end |
