From 45e8268d62add210f3a9a93f677f255f96bb0cff Mon Sep 17 00:00:00 2001 From: ko1 Date: Sat, 20 Jul 2013 05:39:57 +0000 Subject: [PATCH] * array.c (ary_make_shared): make shared array shady. Making non-shady shared array causes SEGV (see rubyci). It seems a bug around shared array. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42079 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ array.c | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index a44a127316..c5a668ff67 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sat Jul 20 14:38:00 2013 Koichi Sasada + + * array.c (ary_make_shared): make shared array shady. + Making non-shady shared array causes SEGV (see rubyci). + It seems a bug around shared array. + Sat Jul 20 12:14:07 2013 Nobuyoshi Nakada * string.c (enc_succ_char, enc_pred_char): consider wchar case. diff --git a/array.c b/array.c index d69d111c67..30786f8f90 100644 --- a/array.c +++ b/array.c @@ -612,8 +612,8 @@ ary_make_shared(VALUE ary) FL_UNSET_EMBED(shared); ARY_SET_LEN((VALUE)shared, ARY_CAPA(ary)); - ARY_SET_PTR((VALUE)shared, RARRAY_RAWPTR(ary)); - ary_mem_clear((VALUE)shared, RARRAY_LEN(ary), ARY_CAPA(ary) - RARRAY_LEN(ary)); + ARY_SET_PTR((VALUE)shared, RARRAY_PTR(ary)); + rb_mem_clear(RARRAY_PTR(shared) + RARRAY_LEN(ary), ARY_CAPA(ary) - RARRAY_LEN(ary)); FL_SET_SHARED_ROOT(shared); ARY_SET_SHARED_NUM((VALUE)shared, 1); FL_SET_SHARED(ary);