diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-08-26 21:36:22 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-08-26 21:36:22 +0900 |
commit | 445e5548c9da906a2d7a490e660328b2893d07d1 (patch) | |
tree | 981f38dd6b15e576bc1274023ffa645bf489dfe5 | |
parent | cc36b5d4aced7c8df0c1933ef3482736de068cfc (diff) | |
download | ruby-445e5548c9da906a2d7a490e660328b2893d07d1.tar.gz |
Fixed error messages at non-ascii %string terminator
-rw-r--r-- | parse.y | 6 | ||||
-rw-r--r-- | test/ruby/test_parse.rb | 2 |
2 files changed, 8 insertions, 0 deletions
@@ -8547,11 +8547,17 @@ parse_percent(struct parser_params *p, const int space_seen, const enum lex_stat quotation: if (c == -1 || !ISALNUM(c)) { term = c; + if (!ISASCII(c)) goto unknown; c = 'Q'; } else { term = nextc(p); if (rb_enc_isalnum(term, p->enc) || !parser_isascii(p)) { + unknown: + pushback(p, term); + c = parser_precise_mbclen(p, p->lex.pcur); + if (c < 0) return 0; + p->lex.pcur += c; yyerror0("unknown type of %string"); return 0; } diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb index 1e909bce1b..422a7cba58 100644 --- a/test/ruby/test_parse.rb +++ b/test/ruby/test_parse.rb @@ -599,6 +599,8 @@ class TestParse < Test::Unit::TestCase assert_syntax_error('%s', /unterminated quoted string/) assert_syntax_error('%ss', /unknown type/) assert_syntax_error('%z()', /unknown type/) + assert_syntax_error("%\u3042", /unknown type/) + assert_syntax_error("%q\u3042", /unknown type/) end def test_symbol |