diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | string.c | 2 | ||||
-rw-r--r-- | test/ruby/test_m17n.rb | 1 |
3 files changed, 8 insertions, 1 deletions
@@ -1,3 +1,9 @@ +Mon Feb 28 16:28:15 2011 NARUSE, Yui <naruse@ruby-lang.org> + + * string.c (tr_trans): when the hash for multibyte repl is empty, + tr is inverse mode, and a character doesn't much the table, the + character should be replaced by last replacement. Bug #4449 + Mon Feb 28 16:38:56 2011 Tanaka Akira <akr@fsij.org> * ext/openssl/ossl_ocsp.c: parenthesize macro arguments. @@ -5060,7 +5060,7 @@ tr_trans(VALUE str, VALUE src, VALUE repl, int sflag) else c = NUM2INT(tmp); } else { - c = errc; + c = cflag ? last : errc; } if (c != errc) { tlen = rb_enc_codelen(c, enc); diff --git a/test/ruby/test_m17n.rb b/test/ruby/test_m17n.rb index a29d509fc4..c4bc9e6637 100644 --- a/test/ruby/test_m17n.rb +++ b/test/ruby/test_m17n.rb @@ -962,6 +962,7 @@ class TestM17N < Test::Unit::TestCase assert_equal("X\u3042\u3044X", "A\u3042\u3044\u3046".tr("^\u3042\u3044", "X")) assert_equal("\u3042\u3046" * 100, ("\u3042\u3044" * 100).tr("\u3044", "\u3046")) + assert_equal("Y", "\u3042".tr("^X", "Y")) end def test_tr_s |