]> granicus.if.org Git - onig/commitdiff
refactoring
authorK.Kosako <kosako@sofnec.co.jp>
Fri, 20 Sep 2019 04:27:59 +0000 (13:27 +0900)
committerK.Kosako <kosako@sofnec.co.jp>
Fri, 20 Sep 2019 08:11:54 +0000 (17:11 +0900)
src/regexec.c

index b00208d57e31322f8935a01b0472595bbaf3f29a..6ad5d711c447bce8e5e7ae37fb4f485057762f2c 100644 (file)
@@ -4375,6 +4375,7 @@ onig_regset_search_with_param(OnigRegSet* set,
 
   r = 0;
   enc = set->enc;
+  msas = (MatchArg* )NULL;
 
   for (i = 0; i < set->n; i++) {
     reg    = set->rs[i].reg;
@@ -4475,15 +4476,15 @@ onig_regset_search_with_param(OnigRegSet* set,
     goto mismatch;
   }
 
-  msas = (MatchArg* )xmalloc(sizeof(*msas) * set->n);
-  CHECK_NULL_RETURN_MEMERR(msas);
+  if (lead == ONIG_REGSET_POSITION_LEAD) {
+    msas = (MatchArg* )xmalloc(sizeof(*msas) * set->n);
+    CHECK_NULL_RETURN_MEMERR(msas);
 
-  for (i = 0; i < set->n; i++) {
-    MATCH_ARG_INIT(msas[i], set->rs[i].reg, option, set->rs[i].region,
-                   orig_start, mps[i]);
-  }
+    for (i = 0; i < set->n; i++) {
+      MATCH_ARG_INIT(msas[i], set->rs[i].reg, option, set->rs[i].region,
+                     orig_start, mps[i]);
+    }
 
-  if (lead == ONIG_REGSET_POSITION_LEAD) {
     r = regset_search_body_position_lead(set, str, end, start, range,
                                          orig_range, option, msas, rmatch_pos);
   }
@@ -4498,13 +4499,14 @@ onig_regset_search_with_param(OnigRegSet* set,
   r = ONIG_MISMATCH;
  finish:
   for (i = 0; i < set->n; i++) {
-    MATCH_ARG_FREE(msas[i]);
+    if (IS_NOT_NULL(msas))
+      MATCH_ARG_FREE(msas[i]);
     if (IS_FIND_NOT_EMPTY(set->rs[i].reg->options) &&
         IS_NOT_NULL(set->rs[i].region)) {
       onig_region_clear(set->rs[i].region);
     }
   }
-  xfree(msas);
+  if (IS_NOT_NULL(msas)) xfree(msas);
   return r;
 
  mismatch_no_msa:
@@ -4516,13 +4518,14 @@ onig_regset_search_with_param(OnigRegSet* set,
   *rmatch_pos = (int )(s - str);
  match2:
   for (i = 0; i < set->n; i++) {
-    MATCH_ARG_FREE(msas[i]);
+    if (IS_NOT_NULL(msas))
+      MATCH_ARG_FREE(msas[i]);
     if (IS_FIND_NOT_EMPTY(set->rs[i].reg->options) &&
         IS_NOT_NULL(set->rs[i].region)) {
       onig_region_clear(set->rs[i].region);
     }
   }
-  xfree(msas);
+  if (IS_NOT_NULL(msas)) xfree(msas);
   return r; /* regex index */
 }