豊福です。

In message "Re: [ruby-dev:34124] Re: Array#take,take_while,drop,drop_whlie"
    on Tue, 25 Mar 2008 18:08:27 +0900, "Yusuke ENDOH" <mame / tsg.ne.jp> writes:
> -    if (len > 0 && len * sizeof(VALUE) <= len) {
> +    if (len > 0 && len * (long)sizeof(VALUE) <= len) {
>        rb_raise(rb_eArgError, "array size too big");
>      }

  len が LONG_MAX/3 を超えた辺りの、例えば 0x56000000 だと
len * (long)sizeof(VALUE) がオーバフローしてもなお 0x58000000
になってこの if文の中に入らないですね。
素朴に

  if (len > LONG_MAX / sizeof(VALUE)) {

じゃダメでしょうか。
---
                        豊福
                        nobu_toyofuku / nifty.com