From 286ba67598d3a5b8d7c2f61c7d2e6f6413847c50 Mon Sep 17 00:00:00 2001 From: Earlopain <14981592+Earlopain@users.noreply.github.com> Date: Wed, 10 Jun 2026 09:48:27 +0200 Subject: [PATCH] Fix multibyte non-alphanumeric chars for bare percent string literals Alphanumerics are correctly handled in the check below by simply discarding the `%`. The same was not true for the other types, which caused some assumption to no longer hold. --- src/prism.c | 1 + test/prism/errors/alnum_delimiters_10.txt | 4 ++++ test/prism/errors/alnum_delimiters_11.txt | 4 ++++ 3 files changed, 9 insertions(+) create mode 100644 test/prism/errors/alnum_delimiters_10.txt create mode 100644 test/prism/errors/alnum_delimiters_11.txt diff --git a/src/prism.c b/src/prism.c index a2e04ed106..36a6028fe5 100644 --- a/src/prism.c +++ b/src/prism.c @@ -11094,6 +11094,7 @@ parser_lex(pm_parser_t *parser) { if (!parser->encoding->alnum_char(parser->current.end, parser->end - parser->current.end)) { if (*parser->current.end >= 0x80) { pm_parser_err_current(parser, PM_ERR_INVALID_PERCENT); + goto lex_next_token; } const uint8_t delimiter = pm_lex_percent_delimiter(parser); diff --git a/test/prism/errors/alnum_delimiters_10.txt b/test/prism/errors/alnum_delimiters_10.txt new file mode 100644 index 0000000000..288f10d59f --- /dev/null +++ b/test/prism/errors/alnum_delimiters_10.txt @@ -0,0 +1,4 @@ +%รข +^ unknown type of %string +รข + diff --git a/test/prism/errors/alnum_delimiters_11.txt b/test/prism/errors/alnum_delimiters_11.txt new file mode 100644 index 0000000000..c52a5a9a1a --- /dev/null +++ b/test/prism/errors/alnum_delimiters_11.txt @@ -0,0 +1,4 @@ +%๐Ÿ’Ž +^ unknown type of %string +๐Ÿ’Ž +