5879206.diff   [plain text]


--- 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);