]> granicus.if.org Git - onig/commitdiff
add backref_num member into ScanEnv
authorK.Kosako <kosako@sofnec.co.jp>
Mon, 26 Aug 2019 00:48:38 +0000 (09:48 +0900)
committerK.Kosako <kosako@sofnec.co.jp>
Mon, 26 Aug 2019 00:48:38 +0000 (09:48 +0900)
src/regcomp.c
src/regparse.c
src/regparse.h

index 6b64fb92cbcce6b2e51fea2693fa689a43f7b63a..ec714a127f8e2befdd6cdb652beda5b57ef4a24b 100644 (file)
@@ -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);
index 0dd48e85accd618a95eea4c23e842b6459400de0..5d667cdc02c491139815d785278af5a9dabc307d 100644 (file)
@@ -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;
 }
 
index efae60f02336914eefcbc2c17c1915aea83be68c..0ee42d4446dcd4be6cbf74c006b4948e4b6d98cc 100644 (file)
@@ -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;