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

ruby-changes:37325

From: nobu <ko1@a...>
Date: Mon, 26 Jan 2015 11:39:06 +0900 (JST)
Subject: [ruby-changes:37325] nobu:r49406 (trunk): string.c: consider widechar

nobu	2015-01-26 11:39:00 +0900 (Mon, 26 Jan 2015)

  New Revision: 49406

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=49406

  Log:
    string.c: consider widechar
    
    * string.c (str_make_independent_expand): consider wide char
      encoding.  [Fix GH-821]

  Modified files:
    trunk/string.c
    trunk/test/-ext-/string/test_cstr.rb
Index: string.c
===================================================================
--- string.c	(revision 49405)
+++ string.c	(revision 49406)
@@ -1589,11 +1589,11 @@ str_make_independent_expand(VALUE str, l https://github.com/ruby/ruby/blob/trunk/string.c#L1589
 
     if (len > capa) len = capa;
 
-    if (capa <= RSTRING_EMBED_LEN_MAX && !STR_EMBED_P(str)) {
+    if (capa + termlen - 1 <= RSTRING_EMBED_LEN_MAX && !STR_EMBED_P(str)) {
 	ptr = RSTRING(str)->as.heap.ptr;
 	STR_SET_EMBED(str);
 	memcpy(RSTRING(str)->as.ary, ptr, len);
-	RSTRING(str)->as.ary[len] = '\0'; /* Ensure string is terminated */
+	TERM_FILL(RSTRING(str)->as.ary + len, termlen);
 	STR_SET_EMBED_LEN(str, len);
 	return;
     }
Index: test/-ext-/string/test_cstr.rb
===================================================================
--- test/-ext-/string/test_cstr.rb	(revision 49405)
+++ test/-ext-/string/test_cstr.rb	(revision 49406)
@@ -93,6 +93,17 @@ class Test_StringCStr < Test::Unit::Test https://github.com/ruby/ruby/blob/trunk/test/-ext-/string/test_cstr.rb#L93
     {}[string] = 1
     non_terminated = "#{string}#{nil}"
     assert_nil(Bug::String.cstr_term_char(non_terminated), gh821)
+
+    result = {}
+    WCHARS.map do |enc|
+      embedded_string = "ab".encode(enc)
+      string = embedded_string.gsub("b".encode(enc), "1".encode(enc))
+      {}[string] = 1
+      non_terminated = "#{string}#{nil}"
+      c = Bug::String.cstr_term_char(non_terminated)
+      result[enc] = c if c
+    end
+    assert_empty(result, gh821)
   end
 
   def assert_wchars_term_char(str)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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