[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

10
parse.y
View File

@ -13017,10 +13017,12 @@ 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);
NODE *match = NEW_MATCH2(node1, node2, loc);
RNODE_MATCH2(match)->nd_args = reg_named_capture_assign(p, lit, loc);
nd_set_line(match, line);
return match;
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);
return match;
}
}
}
}

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\