From 5408d00b7eec040aa60f010c08fffd8d36d39a40 Mon Sep 17 00:00:00 2001 From: marcandre Date: Fri, 1 Jan 2016 17:27:38 +0000 Subject: * lib/ostruct.rb: Fix case of frozen object with initializer. Bug revealed by RubySpec [ruby-core:72639] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53407 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ lib/ostruct.rb | 2 +- test/ostruct/test_ostruct.rb | 3 ++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7123947a5d..ede80f2a78 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Jan 2 02:27:22 2016 Marc-Andre Lafortune + + * lib/ostruct.rb: Fix case of frozen object with initializer. + Bug revealed by RubySpec [ruby-core:72639] + Fri Jan 1 22:01:52 2016 Kazuhiro NISHIYAMA * NEWS: mention about CSV's liberal_parsing option. diff --git a/lib/ostruct.rb b/lib/ostruct.rb index 17efcdc8d3..a95a0f1963 100644 --- a/lib/ostruct.rb +++ b/lib/ostruct.rb @@ -195,7 +195,7 @@ class OpenStruct modifiable[new_ostruct_member(mname)] = args[0] elsif len == 0 if @table.key?(mid) - new_ostruct_member(mid) + new_ostruct_member(mid) unless frozen? @table[mid] end else diff --git a/test/ostruct/test_ostruct.rb b/test/ostruct/test_ostruct.rb index 02c4c74152..8b9b647720 100644 --- a/test/ostruct/test_ostruct.rb +++ b/test/ostruct/test_ostruct.rb @@ -61,13 +61,14 @@ class TC_OpenStruct < Test::Unit::TestCase end def test_frozen - o = OpenStruct.new + o = OpenStruct.new(foo: 42) o.a = 'a' o.freeze assert_raise(RuntimeError) {o.b = 'b'} assert_not_respond_to(o, :b) assert_raise(RuntimeError) {o.a = 'z'} assert_equal('a', o.a) + assert_equal(42, o.foo) o = OpenStruct.new :a => 42 def o.frozen?; nil end o.freeze -- cgit v1.2.3