From 6df4e18914e9d3a4ad76b46df5cc6683ee38bf21 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 19 Dec 2005 14:33:11 +0000 Subject: [PATCH] * parse.y (rb_symname_p): fixed wrong validation. [ruby-dev:28047] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9715 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 +++- parse.y | 5 ++++- test/ruby/test_symbol.rb | 27 +++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0442d64e0b..e37c1419c4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,12 @@ -Mon Dec 19 23:30:59 2005 Nobuyoshi Nakada +Mon Dec 19 23:32:39 2005 Nobuyoshi Nakada * Makefile.in (XCFLAGS): separated as well as win32/Makefile.sub. * main.c (always_gc): dllimport is required for VC to import a DLL symbol. fixed: [ruby-dev:28051] + * parse.y (rb_symname_p): fixed wrong validation. [ruby-dev:28047] + Mon Dec 19 23:09:24 2005 Hirokazu Yamamoto * st.c: uses malloc instead of xmalloc to avoid GC. syck uses st_insert diff --git a/parse.y b/parse.y index bcd4aa53e4..f3a7a42f51 100644 --- a/parse.y +++ b/parse.y @@ -8360,7 +8360,9 @@ rb_symname_p(const char *name) break; case '>': - if (*++m == '>') ++m; + switch (*++m) { + case '>': case '=': ++m; break; + } break; case '=': @@ -8380,6 +8382,7 @@ rb_symname_p(const char *name) break; case '|': case '^': case '&': case '/': case '%': case '~': case '`': + ++m; break; case '[': diff --git a/test/ruby/test_symbol.rb b/test/ruby/test_symbol.rb index b6dd203596..2ccfe64c92 100644 --- a/test/ruby/test_symbol.rb +++ b/test/ruby/test_symbol.rb @@ -29,6 +29,33 @@ class TestSymbol < Test::Unit::TestCase assert_inspect_evaled(':foo') assert_inspect_evaled(':foo!') assert_inspect_evaled(':bar?') + assert_inspect_evaled(':<<') + assert_inspect_evaled(':>>') + assert_inspect_evaled(':<=') + assert_inspect_evaled(':>=') + assert_inspect_evaled(':=~') + assert_inspect_evaled(':==') + assert_inspect_evaled(':===') + assert_raise(SyntaxError) {eval ':='} + assert_inspect_evaled(':*') + assert_inspect_evaled(':**') + assert_raise(SyntaxError) {eval ':***'} + assert_inspect_evaled(':+') + assert_inspect_evaled(':-') + assert_inspect_evaled(':+@') + assert_inspect_evaled(':-@') + assert_inspect_evaled(':|') + assert_inspect_evaled(':^') + assert_inspect_evaled(':&') + assert_inspect_evaled(':/') + assert_inspect_evaled(':%') + assert_inspect_evaled(':~') + assert_inspect_evaled(':`') + assert_inspect_evaled(':[]') + assert_inspect_evaled(':[]=') + assert_raise(SyntaxError) {eval ':||'} + assert_raise(SyntaxError) {eval ':&&'} + assert_raise(SyntaxError) {eval ':['} end def test_inspect_dollar