diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-10-02 11:46:40 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-10-02 11:46:40 +0000 |
commit | 1d42215eb5c0a68c542f5855010bcc816c01fdb6 (patch) | |
tree | d4e528d553256bdef37711ce58dba2705ad3df80 /string.c | |
parent | 902cee38df868e69dac52300251e4d40d394fb37 (diff) | |
download | ruby-1d42215eb5c0a68c542f5855010bcc816c01fdb6.tar.gz ruby-1d42215eb5c0a68c542f5855010bcc816c01fdb6.tar.xz ruby-1d42215eb5c0a68c542f5855010bcc816c01fdb6.zip |
* string.c (rb_str_sub_bang): fix coderange.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@19662 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -3307,7 +3307,11 @@ rb_str_sub_bang(int argc, VALUE *argv, VALUE str) if (OBJ_UNTRUSTED(repl)) untrusted = 1; if (ENC_CODERANGE_UNKNOWN < cr && cr < ENC_CODERANGE_BROKEN) { int cr2 = ENC_CODERANGE(repl); - if (cr2 == ENC_CODERANGE_UNKNOWN || cr2 > cr) cr = cr2; + if (cr2 == ENC_CODERANGE_BROKEN || + (cr == ENC_CODERANGE_VALID && cr2 == ENC_CODERANGE_7BIT)) + cr = ENC_CODERANGE_UNKNOWN; + else + cr = cr2; } plen = end0 - beg0; if (RSTRING_LEN(repl) > plen) { |