[Bug #20295] Fix SEGV when parsing invalid regexp

This commit is contained in:
yui-knk 2024-02-23 09:30:14 +09:00 committed by Yuichiro Kaneko
parent d5080f6e8b
commit 3ca6da24e3
2 changed files with 14 additions and 4 deletions

View File

@ -13017,6 +13017,7 @@ match_op(struct parser_params *p, NODE *node1, NODE *node2, const YYLTYPE *op_lo
case NODE_REGX:
{
const VALUE lit = rb_node_regx_string_val(n);
if (!NIL_P(lit)) {
NODE *match = NEW_MATCH2(node1, node2, loc);
RNODE_MATCH2(match)->nd_args = reg_named_capture_assign(p, lit, loc);
nd_set_line(match, line);
@ -13024,6 +13025,7 @@ match_op(struct parser_params *p, NODE *node1, NODE *node2, const YYLTYPE *op_lo
}
}
}
}
if ((n = last_expr_once_body(node2)) != 0) {
NODE *match3;

View File

@ -1034,6 +1034,14 @@ eom
assert_not_match(/end-of-input/, e.message)
end
def test_invalid_regexp
bug20295 = '[ruby-core:116913] [Bug #20295]'
assert_syntax_error("/[/=~s", /premature end of char-class/, bug20295)
assert_syntax_error("/(?<>)/=~s", /group name is empty/, bug20295)
assert_syntax_error("/(?<a>[)/=~s", /premature end of char-class/, bug20295)
end
def test_lineno_operation_brace_block
expected = __LINE__ + 1
actual = caller_lineno\