43 lines
1.4 KiB
Diff
43 lines
1.4 KiB
Diff
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);
|