Fixed error messages at non-ascii %string terminator

This commit is contained in:
Nobuyoshi Nakada 2020-08-26 21:36:22 +09:00
Родитель cc36b5d4ac
Коммит 445e5548c9
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 7CD2805BFA3770C6
2 изменённых файлов: 8 добавлений и 0 удалений

Просмотреть файл

@ -8547,11 +8547,17 @@ parse_percent(struct parser_params *p, const int space_seen, const enum lex_stat
quotation: quotation:
if (c == -1 || !ISALNUM(c)) { if (c == -1 || !ISALNUM(c)) {
term = c; term = c;
if (!ISASCII(c)) goto unknown;
c = 'Q'; c = 'Q';
} }
else { else {
term = nextc(p); term = nextc(p);
if (rb_enc_isalnum(term, p->enc) || !parser_isascii(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"); yyerror0("unknown type of %string");
return 0; return 0;
} }

Просмотреть файл

@ -599,6 +599,8 @@ class TestParse < Test::Unit::TestCase
assert_syntax_error('%s', /unterminated quoted string/) assert_syntax_error('%s', /unterminated quoted string/)
assert_syntax_error('%ss', /unknown type/) assert_syntax_error('%ss', /unknown type/)
assert_syntax_error('%z()', /unknown type/) assert_syntax_error('%z()', /unknown type/)
assert_syntax_error("%\u3042", /unknown type/)
assert_syntax_error("%q\u3042", /unknown type/)
end end
def test_symbol def test_symbol