summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--parse.y5
-rw-r--r--test/ruby/test_symbol.rb27
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 <nobu@ruby-lang.org>
+Mon Dec 19 23:32:39 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
* 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 <ocean@m2.ccsnet.ne.jp>
* 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