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

ruby-changes:2657

From: ko1@a...
Date: 9 Dec 2007 11:29:50 +0900
Subject: [ruby-changes:2657] nobu - Ruby:r14148 (trunk): * string.c (tr_trans): get rid of segfaults when has mulitbytes but

nobu	2007-12-09 11:29:24 +0900 (Sun, 09 Dec 2007)

  New Revision: 14148

  Modified files:
    trunk/ChangeLog
    trunk/bootstraptest/test_knownbug.rb
    trunk/string.c
    trunk/test/ruby/test_m17n.rb

  Log:
    * string.c (tr_trans): get rid of segfaults when has mulitbytes but
      source sets have no mulitbytes.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/string.c?r1=14148&r2=14147
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14148&r2=14147
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_m17n.rb?r1=14148&r2=14147
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/bootstraptest/test_knownbug.rb?r1=14148&r2=14147

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 14147)
+++ ChangeLog	(revision 14148)
@@ -1,3 +1,8 @@
+Sun Dec  9 11:29:23 2007  Nobuyoshi Nakada  <nobu@r...>
+
+	* string.c (tr_trans): get rid of segfaults when has mulitbytes but
+	  source sets have no mulitbytes.
+
 Sun Dec  9 04:01:28 2007  Tanaka Akira  <akr@f...>
 
 	* encoding.c (rb_enc_mbclen): return 1 if underlying implementation
Index: bootstraptest/test_knownbug.rb
===================================================================
--- bootstraptest/test_knownbug.rb	(revision 14147)
+++ bootstraptest/test_knownbug.rb	(revision 14148)
@@ -162,11 +162,3 @@
   s = "\xa3\xb0\xa3\xb1\xa3\xb1\xa3\xb3\xa3\xb4".force_encoding("euc-jp") 
   s.squeeze == "\xa3\xb0\xa3\xb1\xa3\xb3\xa3\xb4".force_encoding("euc-jp") 
 }
-
-assert_normal_exit %q{
-  "\x81\x41".force_encoding("shift_jis").tr("A", "B")
-}
-
-assert_normal_exit %q{
-  "\x81\x41".force_encoding("shift_jis").tr_s("A", "B")
-}
Index: string.c
===================================================================
--- string.c	(revision 14147)
+++ string.c	(revision 14148)
@@ -3466,7 +3466,7 @@
 		v = trans[c] >= 0 ? trans[c] : Qnil;
 	    }
 	    else {
-		v = rb_hash_aref(hash, INT2NUM(c));
+		v = hash ? rb_hash_aref(hash, INT2NUM(c)) : Qnil;
 	    }
 	    if (!NIL_P(v)) {
 		if (!cflag) {
@@ -3531,7 +3531,7 @@
 		v = trans[c] >= 0 ? trans[c] : Qnil;
 	    }
 	    else {
-		v = rb_hash_aref(hash, INT2NUM(c));
+		v = hash ? rb_hash_aref(hash, INT2NUM(c)) : Qnil;
 	    }
 	    if (!NIL_P(v)) {
 		if (!cflag) {
Index: test/ruby/test_m17n.rb
===================================================================
--- test/ruby/test_m17n.rb	(revision 14147)
+++ test/ruby/test_m17n.rb	(revision 14148)
@@ -483,4 +483,10 @@
     assert_raise(SyntaxError) { eval(s(%{/\\u{6666}#{}\\xc2\\xa0/})) }
     assert_nothing_raised { eval(u(%{/\\u{6666}#{}\\xc2\\xa0/})) }
   end
+
+  def test_tr
+    s = "\x81\x41".force_encoding("shift_jis")
+    assert_equal(s.tr("A", "B"), s)
+    assert_equal(s.tr_s("A", "B"), s)
+  end
 end

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

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