diff -up onig-6.8.2/src/regparse.c.orig onig-6.8.2/src/regparse.c --- onig-6.8.2/src/regparse.c.orig 2023-11-22 10:28:14.536985966 +0100 +++ onig-6.8.2/src/regparse.c 2023-11-22 10:32:19.677112046 +0100 @@ -6198,6 +6198,7 @@ parse_char_class(Node** np, OnigToken* t env->parse_depth++; if (env->parse_depth > ParseDepthLimit) return ONIGERR_PARSE_DEPTH_LIMIT_OVER; + prev_cc = (CClassNode* )NULL; r = fetch_token_in_cc(tok, src, end, env); if (r == TK_CHAR && tok->u.c == '^' && tok->escaped == 0) { @@ -7723,14 +7724,18 @@ static int parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end, ScanEnv* env) { - int r, len, group = 0; + int r, len, group; Node* qn; Node** targetp; + unsigned int parse_depth; + group = 0; *np = NULL; if (tok->type == (enum TokenSyms )term) goto end_of_token; + parse_depth = env->parse_depth; + switch (tok->type) { case TK_ALT: case TK_EOT: @@ -8037,6 +8042,10 @@ parse_exp(Node** np, OnigToken* tok, int if (is_invalid_quantifier_target(*targetp)) return ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID; + parse_depth++; + if (parse_depth > ParseDepthLimit) + return ONIGERR_PARSE_DEPTH_LIMIT_OVER; + qn = node_new_quantifier(tok->u.repeat.lower, tok->u.repeat.upper, (r == TK_INTERVAL ? 1 : 0)); CHECK_NULL_RETURN_MEMERR(qn);