ruby-changes:23024
From: kazu <ko1@a...>
Date: Sat, 17 Mar 2012 01:49:57 +0900 (JST)
Subject: [ruby-changes:23024] kazu:r35073 (trunk): * string.c (trnext): fix bug with string ending with '\\'.
kazu 2012-03-17 01:49:44 +0900 (Sat, 17 Mar 2012) New Revision: 35073 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35073 Log: * string.c (trnext): fix bug with string ending with '\\'. [ruby-dev:45374][Bug #6160] * test/ruby/test_string.rb (TestString#test_delete): test for above. Modified files: trunk/ChangeLog trunk/string.c trunk/test/ruby/test_string.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 35072) +++ ChangeLog (revision 35073) @@ -1,3 +1,11 @@ +Sat Mar 17 01:46:05 2012 Kazuhiro NISHIYAMA <zn@m...> + + * string.c (trnext): fix bug with string ending with '\\'. + [ruby-dev:45374][Bug #6160] + + * test/ruby/test_string.rb (TestString#test_delete): test for + above. + Fri Mar 16 20:06:24 2012 Nobuyoshi Nakada <nobu@r...> * string.c (trnext): should advance char-wise. Index: string.c =================================================================== --- string.c (revision 35072) +++ string.c (revision 35073) @@ -4956,12 +4956,12 @@ for (;;) { if (!t->gen) { if (t->p == t->pend) return -1; - if (rb_enc_ascget(t->p, t->pend, &n, enc) == '\\') { + if (rb_enc_ascget(t->p, t->pend, &n, enc) == '\\' && t->p + n < t->pend) { t->p += n; } t->now = rb_enc_codepoint_len(t->p, t->pend, &n, enc); t->p += n; - if (rb_enc_ascget(t->p, t->pend, &n, enc) == '-') { + if (rb_enc_ascget(t->p, t->pend, &n, enc) == '-' && t->p + n < t->pend) { t->p += n; if (t->p < t->pend) { unsigned int c = rb_enc_codepoint_len(t->p, t->pend, &n, enc); Index: test/ruby/test_string.rb =================================================================== --- test/ruby/test_string.rb (revision 35072) +++ test/ruby/test_string.rb (revision 35073) @@ -508,6 +508,9 @@ assert_equal("a", "abc\u{3042 3044 3046}".delete("^a")) assert_equal("bc\u{3042 3044 3046}", "abc\u{3042 3044 3046}".delete("a")) assert_equal("\u3042", "abc\u{3042 3044 3046}".delete("^\u3042")) + + bug6160 = '[ruby-dev:45374]' + assert_equal("", '\\'.delete('\\'), bug6160) end def test_delete! -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/