diff --git a/parse.y b/parse.y index e3391d64ee..50e32e842a 100644 --- a/parse.y +++ b/parse.y @@ -10118,7 +10118,7 @@ parse_qmark(struct parser_params *p, int space_seen) enc = rb_utf8_encoding(); tokadd_utf8(p, &enc, -1, 0, 0); } - else if (!ISASCII(c = peekc(p))) { + else if (!ISASCII(c = peekc(p)) && c != -1) { nextc(p); if (tokadd_mbchar(p, c) == -1) return 0; } diff --git a/test/ripper/test_scanner_events.rb b/test/ripper/test_scanner_events.rb index 261e259889..ed291c4384 100644 --- a/test/ripper/test_scanner_events.rb +++ b/test/ripper/test_scanner_events.rb @@ -951,6 +951,10 @@ class TestRipper::ScannerEvents < Test::Unit::TestCase assert_equal ["?\\u{41}"], scan('CHAR', "?\\u{41}") + err = nil + assert_equal [], scan('CHAR', '?\\') {|*e| err = e} + assert_equal([:on_parse_error, "Invalid escape character syntax", "?\\"], err) + err = nil assert_equal [], scan('CHAR', '?\\M ') {|*e| err = e} assert_equal([:on_parse_error, "Invalid escape character syntax", "?\\M "], err)