diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-06-11 02:09:00 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-06-11 15:22:16 +0900 |
commit | 140b8117bd3c32cb9d0b144937b90f0178a00b0e (patch) | |
tree | 6465f881f123b2e8243d18b7630d010d2ba71654 | |
parent | 42ac8890efbd38dc021bf5edab325a69be7fc4cf (diff) |
&. is not allowed inside LHS of massign
https://hackerone.com/reports/605262
-rw-r--r-- | parse.y | 6 | ||||
-rw-r--r-- | test/ruby/test_syntax.rb | 5 |
2 files changed, 11 insertions, 0 deletions
@@ -1787,6 +1787,9 @@ mlhs_node : user_variable } | primary_value call_op tIDENTIFIER { + if ($2 == tANDDOT) { + yyerror1(&@2, "&. inside LHS of multiple assignment"); + } /*%%%*/ $$ = attrset(p, $1, $2, $3, &@$); /*% %*/ @@ -1801,6 +1804,9 @@ mlhs_node : user_variable } | primary_value call_op tCONSTANT { + if ($2 == tANDDOT) { + yyerror1(&@2, "&. inside LHS of multiple assignment"); + } /*%%%*/ $$ = attrset(p, $1, $2, $3, &@$); /*% %*/ diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index 6fdca37924..8112b14690 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -976,6 +976,11 @@ eom assert_valid_syntax("a\n.:foo") end + def test_safe_call_in_massign_lhs + assert_syntax_error("*a&.x=0", /LHS/) + assert_syntax_error("a&.x,=0", /LHS/) + end + def test_no_warning_logop_literal assert_warning("") do eval("true||raise;nil") |