summaryrefslogtreecommitdiffstats
path: root/regex.c
diff options
context:
space:
mode:
Diffstat (limited to 'regex.c')
-rw-r--r--regex.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/regex.c b/regex.c
index 1fc90fa5..936269c6 100644
--- a/regex.c
+++ b/regex.c
@@ -320,8 +320,10 @@ static void L1_fill_range(cset_L1_t *L1, wchar_t ch0, wchar_t ch1)
cset_L0_t *L0;
if (i1 > i10 && i1 < i11) {
- free((*L1)[i1]);
- (*L1)[i1] = coerce(cset_L0_t *, -1);
+ if ((*L1)[i1] != coerce(cset_L0_t *, -1)) {
+ free((*L1)[i1]);
+ (*L1)[i1] = coerce(cset_L0_t *, -1);
+ }
continue;
} else if (i10 == i11) {
c0 = ch0;
@@ -401,8 +403,10 @@ static void L2_fill_range(cset_L2_t *L2, wchar_t ch0, wchar_t ch1)
cset_L1_t *L1;
if (i2 > i20 && i2 < i21) {
- free((*L2)[i2]);
- (*L2)[i2] = coerce(cset_L1_t *, -1);
+ if ((*L2)[i2] != coerce(cset_L1_t *, -1)) {
+ free((*L2)[i2]);
+ (*L2)[i2] = coerce(cset_L1_t *, -1);
+ }
continue;
} else if (i20 == i21) {
c0 = ch0;
@@ -473,8 +477,10 @@ static void L3_fill_range(cset_L3_t *L3, wchar_t ch0, wchar_t ch1)
cset_L2_t *L2;
if (i3 > i30 && i3 < i31) {
- free((*L3)[i3]);
- (*L3)[i3] = coerce(cset_L2_t *, -1);
+ if ((*L3)[i3] != coerce(cset_L2_t *, -1)) {
+ free((*L3)[i3]);
+ (*L3)[i3] = coerce(cset_L2_t *, -1);
+ }
continue;
} else if (i30 == i31) {
c0 = ch0;