diff options
-rw-r--r-- | include/ruby/ruby.h | 3 | ||||
-rw-r--r-- | test/ruby/test_object.rb | 10 | ||||
-rw-r--r-- | version.h | 2 |
3 files changed, 13 insertions, 2 deletions
diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index 5ca1f9cc55..34004a13c3 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -2007,7 +2007,8 @@ rb_special_const_p(VALUE obj) static inline void rb_clone_setup(VALUE clone, VALUE obj) { - rb_obj_setup(clone, rb_singleton_class_clone(obj), RBASIC(obj)->flags); + rb_obj_setup(clone, rb_singleton_class_clone(obj), + RBASIC(obj)->flags & ~(FL_PROMOTED0|FL_PROMOTED1|FL_FINALIZE)); rb_singleton_class_attached(RBASIC_CLASS(clone), clone); if (RB_FL_TEST(obj, RUBY_FL_EXIVAR)) rb_copy_generic_ivar(clone, obj); } diff --git a/test/ruby/test_object.rb b/test/ruby/test_object.rb index 7c1b98f76e..5ef1497869 100644 --- a/test/ruby/test_object.rb +++ b/test/ruby/test_object.rb @@ -920,4 +920,14 @@ class TestObject < Test::Unit::TestCase num.times {a.clone.set} end; end + + def test_clone_object_should_not_be_old + assert_normal_exit <<-EOS, '[Bug #13775]' + b = proc { } + 10.times do |i| + b.clone + GC.start + end + EOS + end end @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.4.2" #define RUBY_RELEASE_DATE "2017-08-05" -#define RUBY_PATCHLEVEL 180 +#define RUBY_PATCHLEVEL 181 #define RUBY_RELEASE_YEAR 2017 #define RUBY_RELEASE_MONTH 8 |