merge revision(s) 39495: [Backport #7954]

* string.c (str_byte_substr): don't set coderange if it's not known.
	  [Bug #7954] [ruby-dev:47108]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@39706 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nagachika 2013-03-10 16:05:14 +00:00
parent 300b401c60
commit d2b2159fbd
4 changed files with 31 additions and 3 deletions

View file

@ -4122,10 +4122,29 @@ str_byte_substr(VALUE str, long beg, long len)
}
else {
str2 = rb_str_new5(str, p, len);
rb_enc_cr_str_copy_for_substr(str2, str);
OBJ_INFECT(str2, str);
}
str_enc_copy(str2, str);
if (RSTRING_LEN(str2) == 0) {
if (!rb_enc_asciicompat(STR_ENC_GET(str)))
ENC_CODERANGE_SET(str2, ENC_CODERANGE_VALID);
else
ENC_CODERANGE_SET(str2, ENC_CODERANGE_7BIT);
}
else {
switch (ENC_CODERANGE(str)) {
case ENC_CODERANGE_7BIT:
ENC_CODERANGE_SET(str2, ENC_CODERANGE_7BIT);
break;
default:
ENC_CODERANGE_SET(str2, ENC_CODERANGE_UNKNOWN);
break;
}
}
OBJ_INFECT(str2, str);
return str2;
}