ruby-changes:49829
From: shyouhei <ko1@a...>
Date: Fri, 19 Jan 2018 16:07:53 +0900 (JST)
Subject: [ruby-changes:49829] shyouhei:r61947 (trunk): don't abuse RSTRING_PTR
shyouhei 2018-01-19 16:07:49 +0900 (Fri, 19 Jan 2018) New Revision: 61947 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=61947 Log: don't abuse RSTRING_PTR r61827 was about to fix this. The proper way to allocate memory region is called ALLOCV_N. Modified files: trunk/array.c Index: array.c =================================================================== --- array.c (revision 61946) +++ array.c (revision 61947) @@ -5064,8 +5064,6 @@ rb_ary_cycle(int argc, VALUE *argv, VALU https://github.com/ruby/ruby/blob/trunk/array.c#L5064 return Qnil; } -#define tmpbuf(n, size) rb_str_tmp_new((n)*(size)) -#define tmpbuf_discard(s) (rb_str_resize((s), 0L), RBASIC_SET_CLASS_RAW(s, rb_cString)) #define tmpary(n) rb_ary_tmp_new(n) #define tmpary_discard(a) (ary_discard(a), RBASIC_SET_CLASS_RAW(a, rb_cArray)) @@ -5568,9 +5566,9 @@ rb_ary_product(int argc, VALUE *argv, VA https://github.com/ruby/ruby/blob/trunk/array.c#L5566 { int n = argc+1; /* How many arrays we're operating on */ volatile VALUE t0 = tmpary(n); - volatile VALUE t1 = tmpbuf(n, sizeof(int)); + volatile VALUE t1 = Qundef; VALUE *arrays = RARRAY_PTR(t0); /* The arrays we're computing the product of */ - int *counters = (int*)RSTRING_PTR(t1); /* The current position in each one */ + int *counters = ALLOCV_N(int, t1, n); /* The current position in each one */ VALUE result = Qnil; /* The array we'll be returning, when no block given */ long i,j; long resultlen = 1; @@ -5647,7 +5645,7 @@ rb_ary_product(int argc, VALUE *argv, VA https://github.com/ruby/ruby/blob/trunk/array.c#L5645 } done: tmpary_discard(t0); - tmpbuf_discard(t1); + ALLOCV_END(t1); return NIL_P(result) ? ary : result; } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/