[3459] MacRuby/trunk/array.c
Revision: 3459 http://trac.macosforge.org/projects/ruby/changeset/3459 Author: lsansonetti@apple.com Date: 2010-02-08 17:08:20 -0800 (Mon, 08 Feb 2010) Log Message: ----------- Array#sample: raise an exception if given count is negative, get rid of bad allocas Modified Paths: -------------- MacRuby/trunk/array.c Modified: MacRuby/trunk/array.c =================================================================== --- MacRuby/trunk/array.c 2010-02-09 00:44:23 UTC (rev 3458) +++ MacRuby/trunk/array.c 2010-02-09 01:08:20 UTC (rev 3459) @@ -2833,6 +2833,9 @@ } rb_scan_args(argc, argv, "1", &nv); n = NUM2LONG(nv); + if (n < 0) { + rb_raise(rb_eArgError, "negative count"); + } len = RARRAY_LEN(ary); if (n > len) { n = len; @@ -2884,20 +2887,22 @@ memmove(&sorted[j+1], &sorted[j], sizeof(sorted[0])*(i-j)); sorted[j] = idx[i] = k; } - VALUE *elems = (VALUE *)alloca(sizeof(VALUE) * n); + VALUE *elems = (VALUE *)malloc(sizeof(VALUE) * n); for (i = 0; i < n; i++) { elems[i] = RARRAY_AT(ary, idx[i]); } result = rb_ary_new4(n, elems); + free(elems); } else { - VALUE *elems = (VALUE *)alloca(sizeof(VALUE) * n); + VALUE *elems = (VALUE *)malloc(sizeof(VALUE) * n); for (i = 0; i < n; i++) { j = (long)(rb_genrand_real() * (len - i)) + i; nv = RARRAY_AT(ary, j); elems[i] = nv; } result = rb_ary_new4(n, elems); + free(elems); } return result;
participants (1)
-
source_changes@macosforge.org