mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* vm_eval.c (make_no_method_execption): extract from
raise_method_missing(). * vm_eval.c (send_internal): remove inadvertent symbol creation from public_send. based on a patch by Jeremy Evans <code AT jeremyevans.net> in [ruby-core:38576]. [Feature #5112] * vm_insnhelper.c (vm_call_method): remove inadvertent symbol creation from send and __send__, too. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33419 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
60d83c5da4
commit
89fef02f13
8 changed files with 138 additions and 22 deletions
44
test/-ext-/symbol/test_inadvertent_creation.rb
Normal file
44
test/-ext-/symbol/test_inadvertent_creation.rb
Normal file
|
@ -0,0 +1,44 @@
|
|||
require 'test/unit'
|
||||
require "-test-/symbol/symbol"
|
||||
|
||||
module Test_Symbol
|
||||
class TestInadvertent < Test::Unit::TestCase
|
||||
def self.noninterned_name
|
||||
th = Thread.current.object_id.to_s(36)
|
||||
begin
|
||||
name = "#{th}.#{rand(0x1000).to_s(16)}.#{Time.now.usec}"
|
||||
end while Bug::Symbol.interned?(name)
|
||||
name
|
||||
end
|
||||
|
||||
def setup
|
||||
@obj = Object.new
|
||||
end
|
||||
|
||||
Feature5112 = '[ruby-core:38576]'
|
||||
|
||||
def test_public_send
|
||||
name = self.class.noninterned_name
|
||||
e = assert_raise(NoMethodError) {@obj.public_send(name, Feature5112)}
|
||||
assert_not_send([Bug::Symbol, :interned?, name])
|
||||
assert_equal(name, e.name)
|
||||
assert_equal([Feature5112], e.args)
|
||||
end
|
||||
|
||||
def test_send
|
||||
name = self.class.noninterned_name
|
||||
e = assert_raise(NoMethodError) {@obj.send(name, Feature5112)}
|
||||
assert_not_send([Bug::Symbol, :interned?, name])
|
||||
assert_equal(name, e.name)
|
||||
assert_equal([Feature5112], e.args)
|
||||
end
|
||||
|
||||
def test___send__
|
||||
name = self.class.noninterned_name
|
||||
e = assert_raise(NoMethodError) {@obj.__send__(name, Feature5112)}
|
||||
assert_not_send([Bug::Symbol, :interned?, name])
|
||||
assert_equal(name, e.name)
|
||||
assert_equal([Feature5112], e.args)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue