diff options
author | Nobuyoshi Nakada <[email protected]> | 2019-05-27 19:58:15 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2019-05-27 23:08:48 +0900 |
commit | b4365e75fd70618b79b3a71c1c13f202acd71368 (patch) | |
tree | dbf6691f7730470437611039eec793e4d53314c0 | |
parent | c40003da25543b0f828911af56108ee16af35236 (diff) |
Do not make an incomplete escape a valid char
-rw-r--r-- | parse.y | 8 | ||||
-rw-r--r-- | test/ripper/test_scanner_events.rb | 2 |
2 files changed, 5 insertions, 5 deletions
@@ -6211,7 +6211,7 @@ tokadd_utf8(struct parser_params *p, rb_encoding **encp, if (c != close_brace) { unterminated: - literal_flush(p, p->lex.pcur); + token_flush(p); yyerror0("unterminated Unicode escape"); return; } @@ -6221,11 +6221,10 @@ tokadd_utf8(struct parser_params *p, rb_encoding **encp, } else { /* handle \uxxxx form */ if (!tokadd_codepoint(p, encp, regexp_literal, FALSE)) { + token_flush(p); return; } } - - return; } #define ESCAPE_CONTROL 1 @@ -6312,7 +6311,7 @@ read_escape(struct parser_params *p, int flags, rb_encoding **encp) eof: case -1: yyerror0("Invalid escape character syntax"); - pushback(p, c); + token_flush(p); return '\0'; default: @@ -6391,6 +6390,7 @@ tokadd_escape(struct parser_params *p, rb_encoding **encp) eof: case -1: yyerror0("Invalid escape character syntax"); + token_flush(p); return -1; default: diff --git a/test/ripper/test_scanner_events.rb b/test/ripper/test_scanner_events.rb index b46fcb5a9d..727e967d67 100644 --- a/test/ripper/test_scanner_events.rb +++ b/test/ripper/test_scanner_events.rb @@ -938,7 +938,7 @@ class TestRipper::ScannerEvents < Test::Unit::TestCase assert_equal ["?\\M-H"], scan('CHAR', '?\\M-H') err = nil - assert_equal ["?\\M"], scan('CHAR', '?\\M ') {|*e| err = e} + assert_equal [], scan('CHAR', '?\\M ') {|*e| err = e} assert_equal([:on_parse_error, "Invalid escape character syntax", "?\\M "], err) end |