--- array.old.c 2008-04-22 11:19:35.000000000 -0700 +++ array.c 2008-04-23 00:45:01.000000000 -0700 @@ -976,6 +976,9 @@ if (beg >= RARRAY(ary)->len) { len = beg + rlen; + if (len < 0 || len > LONG_MAX / sizeof(VALUE)) { + rb_raise(rb_eIndexError, "index %ld too big", beg); + } if (len >= RARRAY(ary)->aux.capa) { REALLOC_N(RARRAY(ary)->ptr, VALUE, len); RARRAY(ary)->aux.capa = len;