From: TOYOFUKU Chikanobu Date: 2008-03-27T19:39:01+09:00 Subject: [ruby-dev:34156] Re: Array#take,take_while,drop,drop_whlie 豊福です。 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" 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