From 78b45a0bc00bd717e5adf21f50373155e3b6eb24 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 1 Jul 2013 06:03:45 +0000 Subject: [PATCH] string.c: coderange appending to empty string * string.c (rb_enc_cr_str_buf_cat, rb_str_append): consider an empty string 7bit-clean and should not discard cached coderange of string to be appended. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41720 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ string.c | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 52d0862dc9..6f9a67bb0e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Jul 1 15:03:42 2013 Nobuyoshi Nakada + + * string.c (rb_enc_cr_str_buf_cat, rb_str_append): consider an empty + string 7bit-clean and should not discard cached coderange of string + to be appended. + Mon Jul 1 12:56:41 2013 Shugo Maeda * eval.c (rb_using_module): activate refinements in the ancestors of diff --git a/string.c b/string.c index 49adca7615..581c300281 100644 --- a/string.c +++ b/string.c @@ -1958,7 +1958,7 @@ rb_enc_cr_str_buf_cat(VALUE str, const char *ptr, long len, int res_encindex; int str_cr, res_cr; - str_cr = ENC_CODERANGE(str); + str_cr = RSTRING_LEN(str) ? ENC_CODERANGE(str) : ENC_CODERANGE_7BIT; if (str_encindex == ptr_encindex) { if (str_cr == ENC_CODERANGE_UNKNOWN) @@ -2095,7 +2095,8 @@ rb_str_append(VALUE str, VALUE str2) long len = RSTRING_LEN(str) + len2; enc = rb_enc_check(str, str2); cr = ENC_CODERANGE(str); - if ((cr2 = ENC_CODERANGE(str2)) > cr) cr = cr2; + if ((cr2 = ENC_CODERANGE(str2)) > cr || RSTRING_LEN(str) == 0) + cr = cr2; rb_str_modify_expand(str, len2); memcpy(RSTRING(str)->as.heap.ptr + RSTRING(str)->as.heap.len, RSTRING_PTR(str2), len2+1);