@@ -555,6 +555,16 @@ def initialize(*)
555
555
alias marshal_load initialize
556
556
end
557
557
558
+ class FrozenData < LoadData
559
+ def marshal_load ( data )
560
+ super
561
+ data . instance_variables . each do |iv |
562
+ instance_variable_set ( iv , data . instance_variable_get ( iv ) )
563
+ end
564
+ freeze
565
+ end
566
+ end
567
+
558
568
def test_marshal_dump_excess_encoding
559
569
bug8276 = '[ruby-core:54334] [Bug #8276]'
560
570
t = Bug8276 . new ( bug8276 )
@@ -574,18 +584,20 @@ def test_marshal_dump_ivar
574
584
def test_marshal_load_ivar
575
585
s = "data with ivar"
576
586
s . instance_variable_set ( :@t , 42 )
577
- t = LoadData . new ( s )
578
- s = Marshal . dump ( t )
579
587
hook = -> ( v ) {
580
588
if LoadData === v
581
- assert_send ( [ v , :instance_variable_defined? , :@t ] )
582
- assert_equal ( 42 , v . instance_variable_get ( :@t ) )
589
+ assert_send ( [ v , :instance_variable_defined? , :@t ] , v . class . name )
590
+ assert_equal ( 42 , v . instance_variable_get ( :@t ) , v . class . name )
583
591
end
584
592
v
585
593
}
586
- v = Marshal . load ( s , hook )
587
- assert_send ( [ v , :instance_variable_defined? , :@t ] )
588
- assert_equal ( 42 , v . instance_variable_get ( :@t ) )
594
+ [ LoadData , FrozenData ] . each do |klass |
595
+ t = klass . new ( s )
596
+ d = Marshal . dump ( t )
597
+ v = assert_nothing_raised ( RuntimeError ) { break Marshal . load ( d , hook ) }
598
+ assert_send ( [ v , :instance_variable_defined? , :@t ] , klass . name )
599
+ assert_equal ( 42 , v . instance_variable_get ( :@t ) , klass . name )
600
+ end
589
601
end
590
602
591
603
def test_class_ivar
0 commit comments