summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--parse.y4
-rw-r--r--test/ruby/test_parse.rb1
2 files changed, 4 insertions, 1 deletions
diff --git a/parse.y b/parse.y
index bd1717d724..ff00fa8e35 100644
--- a/parse.y
+++ b/parse.y
@@ -8659,7 +8659,8 @@ parse_percent(struct parser_params *p, const int space_seen, const enum lex_stat
c = nextc(p);
quotation:
- if (c == -1 || !ISALNUM(c)) {
+ if (c == -1) goto unterminated;
+ if (!ISALNUM(c)) {
term = c;
if (!ISASCII(c)) goto unknown;
c = 'Q';
@@ -8677,6 +8678,7 @@ parse_percent(struct parser_params *p, const int space_seen, const enum lex_stat
}
}
if (term == -1) {
+ unterminated:
compile_error(p, "unterminated quoted string meets end of file");
return 0;
}
diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb
index 5f638afa01..4b7a12c8ef 100644
--- a/test/ruby/test_parse.rb
+++ b/test/ruby/test_parse.rb
@@ -601,6 +601,7 @@ class TestParse < Test::Unit::TestCase
assert_syntax_error('%z()', /unknown type/)
assert_syntax_error("%\u3042", /unknown type/)
assert_syntax_error("%q\u3042", /unknown type/)
+ assert_syntax_error("%", /unterminated quoted string/)
end
def test_symbol