r = 0;
enc = set->enc;
+ msas = (MatchArg* )NULL;
for (i = 0; i < set->n; i++) {
reg = set->rs[i].reg;
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);
}
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:
*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 */
}