From 298ad65a428f8f7f4e5dbf796f35862c34478c0e Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 7 Jul 2008 15:23:01 +0000 Subject: * string.c (rb_str_succ): limit carrying in an alphanumeric region if exists. [ruby-dev:35094] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@17945 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- string.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'string.c') diff --git a/string.c b/string.c index 983f3e682..8c1cf0d83 100644 --- a/string.c +++ b/string.c @@ -2535,13 +2535,16 @@ rb_str_succ(VALUE orig) enum neighbor_char neighbor; if ((l = rb_enc_precise_mbclen(s, e, enc)) <= 0) continue; neighbor = enc_succ_alnum_char(s, l, enc, carry); - if (neighbor == NEIGHBOR_NOT_CHAR) - continue; - if (neighbor == NEIGHBOR_FOUND) + if (neighbor == NEIGHBOR_NOT_CHAR) { + if (c == -1) continue; + s++; + } + else if (neighbor == NEIGHBOR_FOUND) return str; c = 1; carry_pos = s - sbeg; carry_len = l; + if (neighbor == NEIGHBOR_NOT_CHAR) break; } if (c == -1) { /* str contains no alnum */ s = e; -- cgit