From: K.Kosako Date: Tue, 27 Aug 2019 04:20:16 +0000 (+0900) Subject: add backtrack_mem member into ScanEnv X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=94e5a2198dd529e8908de1bdcdec9910fc4be7c7;p=onig add backtrack_mem member into ScanEnv --- diff --git a/src/regcomp.c b/src/regcomp.c index ec714a1..1bd0549 100644 --- a/src/regcomp.c +++ b/src/regcomp.c @@ -3706,8 +3706,10 @@ recursive_call_check_trav(Node* node, ScanEnv* env, int state) if (! NODE_IS_RECURSION(node)) { NODE_STATUS_ADD(node, MARK1); r = recursive_call_check(NODE_BODY(node)); - if (r != 0) + if (r != 0) { NODE_STATUS_ADD(node, RECURSION); + MEM_STATUS_ON(env->backtrack_mem, en->m.regnum); + } NODE_STATUS_REMOVE(node, MARK1); } @@ -4985,6 +4987,7 @@ setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env) if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT | IN_MULTI_ENTRY)) != 0 || NODE_IS_RECURSION(node)) { MEM_STATUS_ON(env->st_mem_start, en->m.regnum); + MEM_STATUS_ON(env->backtrack_mem, en->m.regnum); } r = setup_tree(NODE_BODY(node), reg, state, env); break; diff --git a/src/regparse.c b/src/regparse.c index 5d667cd..7ba4b26 100644 --- a/src/regparse.c +++ b/src/regparse.c @@ -1948,6 +1948,7 @@ scan_env_clear(ScanEnv* env) MEM_STATUS_CLEAR(env->cap_history); MEM_STATUS_CLEAR(env->st_mem_start); MEM_STATUS_CLEAR(env->st_mem_end); + MEM_STATUS_CLEAR(env->backtrack_mem); MEM_STATUS_CLEAR(env->backrefed_mem); env->error = (UChar* )NULL; env->error_end = (UChar* )NULL; diff --git a/src/regparse.h b/src/regparse.h index 0ee42d4..bb346a1 100644 --- a/src/regparse.h +++ b/src/regparse.h @@ -401,6 +401,7 @@ typedef struct { MemStatusType cap_history; MemStatusType st_mem_start; MemStatusType st_mem_end; + MemStatusType backtrack_mem; /* backtrack/recursion */ MemStatusType backrefed_mem; UChar* pattern; UChar* pattern_end;