From 84fe38438311911211c2d415967ed7c07624175b Mon Sep 17 00:00:00 2001 From: akr Date: Wed, 30 Jan 2008 05:29:37 +0000 Subject: * string.c (rb_str_succ): use wrapped character as a carry for ASCII incompatible encoding. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15339 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 9 +++++++-- string.c | 4 ++++ test/ruby/test_utf16.rb | 8 ++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4cdb594db2..4ac70fb358 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Jan 30 14:27:19 2008 Tanaka Akira + + * string.c (rb_str_succ): use wrapped character as a carry for + ASCII incompatible encoding. + Wed Jan 30 12:26:59 2008 Tanaka Akira * enc/utf_16be.c (UTF16_IS_SURROGATE_FIRST): avoid branch. @@ -12,7 +17,7 @@ Wed Jan 30 12:26:59 2008 Tanaka Akira Wed Jan 30 12:06:43 2008 Tadayoshi Funaba - * bignum.c (rb_cstr_to_inum): '0_2' is a valid representatin. + * bignum.c (rb_cstr_to_inum): '0_2' is a valid representation. Wed Jan 30 11:57:50 2008 NARUSE, Yui @@ -141,7 +146,7 @@ Tue Jan 29 03:01:29 2008 NAKAMURA Usaku Tue Jan 29 01:38:02 2008 NAKAMURA Usaku * common.mk ($(srcdir)/revision.h): no need to show ifchange execution - because ifchange echos updated or unchaned. + because ifchange echos updated or unchanged. Tue Jan 29 01:26:23 2008 Nobuyoshi Nakada diff --git a/string.c b/string.c index 29473251a3..945241ca3d 100644 --- a/string.c +++ b/string.c @@ -2203,6 +2203,10 @@ rb_str_succ(VALUE orig) /* wrapped to \0...\0. search next valid char. */ enc_succ_char(s, l, enc); } + if (!rb_enc_asciicompat(enc)) { + MEMCPY(carry, s, char, l); + carry_len = l; + } carry_pos = s - sbeg; } } diff --git a/test/ruby/test_utf16.rb b/test/ruby/test_utf16.rb index 05236348d6..654818fbc8 100644 --- a/test/ruby/test_utf16.rb +++ b/test/ruby/test_utf16.rb @@ -176,6 +176,14 @@ EOT assert_str_equal(s, s.chomp, "#{encdump s}.chomp") end + def test_succ + s = "\xff\xff".force_encoding("utf-16be") + assert(s.succ.valid_encoding?, "#{encdump s}.succ.valid_encoding?") + + s = "\xdb\xff\xdf\xff".force_encoding("utf-16be") + assert(s.succ.valid_encoding?, "#{encdump s}.succ.valid_encoding?") + end + def test_regexp_union enccall(Regexp, :union, "aa".force_encoding("utf-16be"), "bb".force_encoding("utf-16be")) end -- cgit v1.2.3