ruby-changes:15600
From: nobu <ko1@a...>
Date: Tue, 27 Apr 2010 10:54:44 +0900 (JST)
Subject: [ruby-changes:15600] Ruby:r27507 (trunk): * parse.y (parser_read_escape): deny extra character escapes.
nobu 2010-04-27 10:54:23 +0900 (Tue, 27 Apr 2010) New Revision: 27507 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=27507 Log: * parse.y (parser_read_escape): deny extra character escapes. [ruby-core:27228] Modified files: trunk/ChangeLog trunk/parse.y trunk/test/ruby/test_literal.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 27506) +++ ChangeLog (revision 27507) @@ -1,3 +1,8 @@ +Tue Apr 27 10:54:14 2010 Nobuyoshi Nakada <nobu@r...> + + * parse.y (parser_read_escape): deny extra character escapes. + [ruby-core:27228] + Tue Apr 27 06:20:13 2010 Tanaka Akira <akr@f...> * io.c (select_internal): IO which cbuf is not empty is readable. Index: parse.y =================================================================== --- parse.y (revision 27506) +++ parse.y (revision 27507) @@ -5593,6 +5593,7 @@ goto eof; } if ((c = nextc()) == '\\') { + if (peek('u')) goto eof; return read_escape(flags|ESCAPE_META, encp) | 0x80; } else if (c == -1 || !ISASCII(c)) goto eof; @@ -5608,6 +5609,7 @@ case 'c': if (flags & ESCAPE_CONTROL) goto eof; if ((c = nextc())== '\\') { + if (peek('u')) goto eof; c = read_escape(flags|ESCAPE_CONTROL, encp); } else if (c == '?') Index: test/ruby/test_literal.rb =================================================================== --- test/ruby/test_literal.rb (revision 27506) +++ test/ruby/test_literal.rb (revision 27507) @@ -52,6 +52,13 @@ assert_equal "\1", "\1" assert_equal "3", "\x33" assert_equal "\n", "\n" + bug2500 = '[ruby-core:27228]' + %w[c C- M-].each do |pre| + ["u", "x", %w[u{ }]].each do |open, close| + str = "\"\\#{pre}\\#{open}5555#{close}\"" + assert_raise(SyntaxError, "#{bug2500} eval(#{str})") {eval(str)} + end + end end def test_dstring -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/