Skip to content
  • U.Nakamura's avatar
    3aed194a
    merge revision(s) 56938: [Backport #12988] · 3aed194a
    U.Nakamura authored
    	Stop reading past the end of `ivptr` array
    
    	If you have code like this:
    
    	```ruby
    	class A
      def initialize
        @a = nil
        @b = nil
        @c = nil
        @d = nil
        @e = nil
      end
    	end
    
    	x = A.new
    	y = x.clone
    	100.times { |z| x.instance_variable_set(:"@foo#{z}", nil) }
    	puts y.inspect
    	```
    
    	`x` and `y` will share `iv_index_tbl` hashes.  However, the size of the
    	hash will grow larger than the number if entries in `ivptr` in `y`.
    	Before this commit, `rb_ivar_count` would use the size of the hash to
    	determine how far to read in to the array, but this means that it could
    	read past the end of the array and cause the program to segv
    
    	[ruby-core:78403]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_2@57214 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
    3aed194a
    merge revision(s) 56938: [Backport #12988]
    U.Nakamura authored
    	Stop reading past the end of `ivptr` array
    
    	If you have code like this:
    
    	```ruby
    	class A
      def initialize
        @a = nil
        @b = nil
        @c = nil
        @d = nil
        @e = nil
      end
    	end
    
    	x = A.new
    	y = x.clone
    	100.times { |z| x.instance_variable_set(:"@foo#{z}", nil) }
    	puts y.inspect
    	```
    
    	`x` and `y` will share `iv_index_tbl` hashes.  However, the size of the
    	hash will grow larger than the number if entries in `ivptr` in `y`.
    	Before this commit, `rb_ivar_count` would use the size of the hash to
    	determine how far to read in to the array, but this means that it could
    	read past the end of the array and cause the program to segv
    
    	[ruby-core:78403]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_2@57214 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Loading