pack.c: check index range

* pack.c (pack_pack): always check index range against the
  receiver array length, which can be shortened by elements
  conversion.  reported by Marcin 'Icewall' Noga of Cisco Talos.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53080 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2015-12-13 09:33:40 +00:00
parent db48c30794
commit d10d5a974d
3 changed files with 30 additions and 5 deletions

View file

@ -794,4 +794,23 @@ EXPECTED
}
}
end
def test_pack_resize
assert_separately([], <<-'end;')
ary = []
obj = Class.new {
define_method(:to_str) {
ary.clear()
ary = nil
GC.start
"TALOS"
}
}.new
ary.push(obj)
ary.push(".")
assert_raise_with_message(ArgumentError, /too few/) {ary.pack("AA")}
end;
end
end