mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	marshal.c: marshal_dump instance varialbes
* marshal.c (w_object): dump instance varialbes of the result of marshal_dump not the original object. [ruby-core:51163] [Bug #7627] * complex.c (nucomp_marshal_dump): need to copy instance variables. * rational.c (nurat_marshal_dump): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									68d131d6a5
								
							
						
					
					
						commit
						3d0786a3a8
					
				
					 5 changed files with 32 additions and 2 deletions
				
			
		|  | @ -1,3 +1,12 @@ | |||
| Sat Jan 26 22:39:12 2013  Nobuyoshi Nakada  <nobu@ruby-lang.org> | ||||
| 
 | ||||
| 	* marshal.c (w_object): dump instance varialbes of the result of | ||||
| 	  marshal_dump not the original object.  [ruby-core:51163] [Bug #7627] | ||||
| 
 | ||||
| 	* complex.c (nucomp_marshal_dump): need to copy instance variables. | ||||
| 
 | ||||
| 	* rational.c (nurat_marshal_dump): ditto. | ||||
| 
 | ||||
| Sat Jan 26 13:35:56 2013  Eric Hodel  <drbrain@segment7.net> | ||||
| 
 | ||||
| 	* ext/fcntl/fcntl.c:  Document Fcntl constants | ||||
|  |  | |||
|  | @ -1324,6 +1324,7 @@ nucomp_marshal_dump(VALUE self) | |||
|     get_dat1(self); | ||||
| 
 | ||||
|     a = rb_assoc_new(dat->real, dat->imag); | ||||
|     rb_copy_generic_ivar(a, self); | ||||
|     return a; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -651,11 +651,11 @@ w_object(VALUE obj, struct dump_arg *arg, int limit) | |||
| 
 | ||||
| 	    v = rb_funcall2(obj, s_mdump, 0, 0); | ||||
| 	    check_dump_arg(arg, s_mdump); | ||||
| 	    hasiv = has_ivars(obj, ivtbl); | ||||
| 	    hasiv = has_ivars(v, ivtbl); | ||||
| 	    if (hasiv) w_byte(TYPE_IVAR, arg); | ||||
| 	    w_class(TYPE_USRMARSHAL, obj, arg, FALSE); | ||||
| 	    w_object(v, arg, limit); | ||||
| 	    if (hasiv) w_ivar(obj, ivtbl, &c_arg); | ||||
| 	    if (hasiv) w_ivar(v, ivtbl, &c_arg); | ||||
| 	    return; | ||||
| 	} | ||||
| 	if (rb_obj_respond_to(obj, s_dump, TRUE)) { | ||||
|  |  | |||
|  | @ -1583,6 +1583,7 @@ nurat_marshal_dump(VALUE self) | |||
|     get_dat1(self); | ||||
| 
 | ||||
|     a = rb_assoc_new(dat->num, dat->den); | ||||
|     rb_copy_generic_ivar(a, self); | ||||
|     return a; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -517,4 +517,23 @@ class TestMarshal < Test::Unit::TestCase | |||
|       assert(!c.untrusted?, bug7325) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   class Bug7627 < Struct.new(:bar) | ||||
|     attr_accessor :foo | ||||
| 
 | ||||
|     def marshal_dump; 'dump'; end  # fake dump data | ||||
|     def marshal_load(*); end       # do nothing | ||||
|   end | ||||
| 
 | ||||
|   def test_marshal_dump_struct_ivar | ||||
|     bug7627 = '[ruby-core:51163]' | ||||
|     obj = Bug7627.new | ||||
|     obj.foo = '[Bug #7627]' | ||||
| 
 | ||||
|     dump   = Marshal.dump(obj) | ||||
|     loaded = Marshal.load(dump) | ||||
| 
 | ||||
|     assert_equal(obj, loaded, bug7627) | ||||
|     assert_nil(loaded.foo, bug7627) | ||||
|   end | ||||
| end | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 nobu
						nobu