From: K.Kosako Date: Mon, 26 Aug 2019 00:48:38 +0000 (+0900) Subject: add backref_num member into ScanEnv X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c3317af63597d9076bd42123948bdea66f3ed22a;p=onig add backref_num member into ScanEnv --- diff --git a/src/regcomp.c b/src/regcomp.c index 6b64fb9..ec714a1 100644 --- a/src/regcomp.c +++ b/src/regcomp.c @@ -6585,11 +6585,12 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end, r = setup_tree(root, reg, 0, &scan_env); if (r != 0) goto err_unset; - set_parent_node_trav(root, NULL_NODE); - r = set_empty_repeat_node_trav(root, NULL_NODE, &scan_env); - if (r != 0) goto err_unset; - set_empty_status_check_trav(root, &scan_env); - + if (scan_env.backref_num != 0) { + set_parent_node_trav(root, NULL_NODE); + r = set_empty_repeat_node_trav(root, NULL_NODE, &scan_env); + if (r != 0) goto err_unset; + set_empty_status_check_trav(root, &scan_env); + } #ifdef ONIG_DEBUG_PARSE print_tree(stderr, root); diff --git a/src/regparse.c b/src/regparse.c index 0dd48e8..5d667cd 100644 --- a/src/regparse.c +++ b/src/regparse.c @@ -1966,6 +1966,7 @@ scan_env_clear(ScanEnv* env) xmemset(env->mem_env_static, 0, sizeof(env->mem_env_static)); env->parse_depth = 0; + env->backref_num = 0; env->keep_num = 0; env->save_num = 0; env->save_alloc_num = 0; @@ -2347,6 +2348,8 @@ node_new_backref(int back_num, int* backrefs, int by_name, for (i = 0; i < back_num; i++) p[i] = backrefs[i]; } + + env->backref_num++; return node; } diff --git a/src/regparse.h b/src/regparse.h index efae60f..0ee42d4 100644 --- a/src/regparse.h +++ b/src/regparse.h @@ -418,7 +418,7 @@ typedef struct { MemEnv mem_env_static[SCANENV_MEMENV_SIZE]; MemEnv* mem_env_dynamic; unsigned int parse_depth; - + int backref_num; int keep_num; int save_num; int save_alloc_num;