diff options
-rw-r--r-- | parse.y | 2 | ||||
-rw-r--r-- | test/ripper/test_scanner_events.rb | 10 | ||||
-rw-r--r-- | test/ruby/test_parse.rb | 2 |
3 files changed, 12 insertions, 2 deletions
@@ -6133,8 +6133,8 @@ tok_hex(struct parser_params *p, size_t *numlen) c = scan_hex(p->lex.pcur, 2, numlen); if (!*numlen) { - p->lex.ptok = p->lex.pcur; yyerror0("invalid hex escape"); + token_flush(p); return 0; } p->lex.pcur += *numlen; diff --git a/test/ripper/test_scanner_events.rb b/test/ripper/test_scanner_events.rb index 0b4814a73e..339a66d5ec 100644 --- a/test/ripper/test_scanner_events.rb +++ b/test/ripper/test_scanner_events.rb @@ -976,4 +976,14 @@ class TestRipper::ScannerEvents < Test::Unit::TestCase assert_match /Invalid char/, err[1] assert_equal "\e", err[2] end + + def test_invalid_hex_escape + err = nil + assert_equal ['U'], scan('tstring_content', '"\\xU"') {|*e| err = e} + assert_equal [:on_parse_error, "invalid hex escape", "\\x"], err + + err = nil + assert_equal ['U'], scan('tstring_content', '/\\xU/') {|*e| err = e} + assert_equal [:on_parse_error, "invalid hex escape", "\\x"], err + end end if ripper_test diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb index fca8d7484a..ff62aef785 100644 --- a/test/ruby/test_parse.rb +++ b/test/ruby/test_parse.rb @@ -513,7 +513,7 @@ class TestParse < Test::Unit::TestCase mesg = 'from the backslash through the invalid char' e = assert_syntax_error('"\xg1"', /hex escape/) - assert_equal(' ^', e.message.lines.last, mesg) + assert_equal(' ^~', e.message.lines.last, mesg) e = assert_syntax_error('"\u{1234"', 'unterminated Unicode escape') assert_equal(' ^', e.message.lines.last, mesg) |