[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]