--- string.old.c 2008-04-22 11:19:38.000000000 -0700 +++ string.c 2008-04-23 11:27:23.000000000 -0700 @@ -780,6 +782,9 @@ capa = RSTRING(str)->aux.capa; } len = RSTRING(str)->len+RSTRING(str2)->len; + if (len < 0 || (capa+1) > LONG_MAX / 2) { + rb_raise(rb_eArgError, "string sizes too big"); + } if (capa <= len) { while (len > capa) { capa = (capa + 1) * 2;