--- string.old.c 2008-04-22 11:19:38.000000000 -0700 +++ string.c 2008-04-23 14:48:50.000000000 -0700 @@ -458,10 +458,9 @@ VALUE *argv; if (TYPE(arg) == T_ARRAY) { - argv = ALLOCA_N(VALUE, RARRAY(arg)->len + 1); - argv[0] = str; - MEMCPY(argv+1, RARRAY(arg)->ptr, VALUE, RARRAY(arg)->len); - return rb_f_sprintf(RARRAY(arg)->len+1, argv); + argv = rb_ary_dup(arg); + rb_ary_unshift(argv, str); + return rb_f_sprintf(RARRAY(arg)->len+1, RARRAY(argv)->ptr); } argv = ALLOCA_N(VALUE, 2);