Skip to content

Commit 4204d07

Browse files
committed
Reverse sync from upstream
1 parent 33d336a commit 4204d07

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

src/prism.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9653,7 +9653,8 @@ escape_read_warn(pm_parser_t *parser, uint8_t flags, uint8_t flag, const char *t
96539653
*/
96549654
static void
96559655
escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expression_buffer, uint8_t flags) {
9656-
switch (peek(parser)) {
9656+
uint8_t peeked = peek(parser);
9657+
switch (peeked) {
96579658
case '\\': {
96589659
parser->current.end++;
96599660
escape_write_byte(parser, buffer, regular_expression_buffer, flags, escape_byte('\\', flags));
@@ -9723,6 +9724,7 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre
97239724
}
97249725
}
97259726

9727+
value = escape_byte(value, flags);
97269728
escape_write_byte(parser, buffer, regular_expression_buffer, flags, value);
97279729
return;
97289730
}
@@ -10050,6 +10052,11 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre
1005010052
PRISM_FALLTHROUGH
1005110053
}
1005210054
default: {
10055+
if ((flags & (PM_ESCAPE_FLAG_CONTROL | PM_ESCAPE_FLAG_META)) && !char_is_ascii_printable(peeked)) {
10056+
size_t width = parser->encoding->char_width(parser->current.end, parser->end - parser->current.end);
10057+
pm_parser_err(parser, parser->current.start, parser->current.end + width, PM_ERR_ESCAPE_INVALID_META);
10058+
return;
10059+
}
1005310060
if (parser->current.end < parser->end) {
1005410061
escape_write_escape_encoded(parser, buffer, regular_expression_buffer, flags);
1005510062
} else {

0 commit comments

Comments
 (0)