diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | string.c | 2 | ||||
-rw-r--r-- | symbol.c | 2 |
3 files changed, 14 insertions, 2 deletions
@@ -1,3 +1,15 @@ +Fri Aug 15 19:34:33 2014 Koichi Sasada <ko1@atdot.net> + + * string.c (setup_fake_str): fake strings should not set class by + RBASIC_SET_CLASS() because it insert write barriers to fake + (non-RVALUE) structure. + + It can cause unexpected behaviour. + + Ruby 2.1 also have a same problem (setup_fake_str() in parse.y). + + * symbol.c (setup_fake_str): ditto. + Fri Aug 15 19:27:25 2014 Koichi Sasada <ko1@atdot.net> * array.c (rb_ary_tmp_new): added. @@ -240,7 +240,7 @@ setup_fake_str(struct RString *fake_str, const char *name, long len, int encidx) ENCODING_SET_INLINED((VALUE)fake_str, encidx); - RBASIC_SET_CLASS((VALUE)fake_str, rb_cString); + RBASIC_SET_CLASS_RAW((VALUE)fake_str, rb_cString); fake_str->as.heap.len = len; fake_str->as.heap.ptr = (char *)name; fake_str->as.heap.aux.capa = len; @@ -414,7 +414,7 @@ static VALUE setup_fake_str(struct RString *fake_str, const char *name, long len) { fake_str->basic.flags = T_STRING|RSTRING_NOEMBED; - RBASIC_SET_CLASS((VALUE)fake_str, rb_cString); + RBASIC_SET_CLASS_RAW((VALUE)fake_str, rb_cString); fake_str->as.heap.len = len; fake_str->as.heap.ptr = (char *)name; fake_str->as.heap.aux.capa = len; |