summaryrefslogtreecommitdiffhomepage
path: root/mrblib
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-04-08 20:27:28 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-04-08 20:27:28 +0900
commit292bffb32e7434b4725f39924adf0e9f8af5d1cf (patch)
treeb6d1298afce1b4acb7660db07779ed938984dfc5 /mrblib
parentec1688807ef301483321919778b2ccb578822767 (diff)
downloadmruby-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.rb24
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