1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

ostruct.rb: fix OpenStruct.allocate

* lib/ostruct.rb (OpenStruct.allocate): initialize an instance
  variable directly, without calling `intialize` method which may
  be overridden in a subclass.  [ruby-core:80292] [Bug #13358]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58077 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2017-03-24 12:16:54 +00:00
parent 7142f5b595
commit cd911b9367
2 changed files with 13 additions and 1 deletions

View file

@ -74,7 +74,10 @@
#
class OpenStruct
class << self # :nodoc:
alias allocate new
def allocate
(x = super).instance_variable_set(:@table, {})
x
end
end
#

View file

@ -183,4 +183,13 @@ class TC_OpenStruct < Test::Unit::TestCase
os.foo = 44
assert_equal(43, os.foo)
end
def test_allocate_subclass
bug = '[ruby-core:80292] [Bug #13358] allocate should not call initialize'
c = Class.new(OpenStruct) {
def initialize(x,y={})super(y);end
}
os = assert_nothing_raised(ArgumentError, bug) {c.allocate}
assert_instance_of(c, os)
end
end