ruby-changes:17667
From: nobu <ko1@a...>
Date: Wed, 3 Nov 2010 14:14:06 +0900 (JST)
Subject: [ruby-changes:17667] Ruby:r29676 (trunk): * string.c (rb_enc_cr_str_buf_cat): concatenation of valid
nobu 2010-11-03 14:13:54 +0900 (Wed, 03 Nov 2010) New Revision: 29676 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29676 Log: * string.c (rb_enc_cr_str_buf_cat): concatenation of valid encoding string and invalid encoding string should result invalid encoding. [ruby-core:33027] Modified files: trunk/ChangeLog trunk/string.c trunk/test/ruby/test_m17n.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 29675) +++ ChangeLog (revision 29676) @@ -1,3 +1,9 @@ +Wed Nov 3 14:13:46 2010 Nobuyoshi Nakada <nobu@r...> + + * string.c (rb_enc_cr_str_buf_cat): concatenation of valid + encoding string and invalid encoding string should result + invalid encoding. [ruby-core:33027] + Wed Nov 3 08:58:59 2010 Koichi Sasada <ko1@a...> * gc.c, vm.c, vm_core.h: remove USE_VALUE_CACHE option. Index: string.c =================================================================== --- string.c (revision 29675) +++ string.c (revision 29676) @@ -1905,7 +1905,10 @@ } else if (str_cr == ENC_CODERANGE_VALID) { res_encindex = str_encindex; - res_cr = str_cr; + if (ptr_cr == ENC_CODERANGE_7BIT || ptr_cr == ENC_CODERANGE_VALID) + res_cr = str_cr; + else + res_cr = ptr_cr; } else { /* str_cr == ENC_CODERANGE_BROKEN */ res_encindex = str_encindex; Index: test/ruby/test_m17n.rb =================================================================== --- test/ruby/test_m17n.rb (revision 29675) +++ test/ruby/test_m17n.rb (revision 29676) @@ -1299,6 +1299,16 @@ s = "\xa1\xa1\x8f".force_encoding("euc-jp") assert_equal(false, s.valid_encoding?) assert_equal(true, s.reverse.valid_encoding?) + + bug4018 = '[ruby-core:33027]' + s = "\xa1\xa1".force_encoding("euc-jp") + assert_equal(true, s.valid_encoding?) + s << "\x8f".force_encoding("euc-jp") + assert_equal(false, s.valid_encoding?, bug4018) + s = "aa".force_encoding("utf-16be") + assert_equal(true, s.valid_encoding?) + s << "\xff".force_encoding("utf-16be") + assert_equal(false, s.valid_encoding?, bug4018) end def test_getbyte -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/