summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNARUSE, Yui <naruse@airemix.jp>2022-04-12 19:53:43 +0900
committerNARUSE, Yui <naruse@airemix.jp>2022-04-12 19:53:43 +0900
commit73f45e5e96ccc13a131f7c0122cf8600ce5b930f (patch)
treeb708046606dfc3afa727098a23278133f32be6f5
parent53f5fc4236a754ddf94b20dbb70ab63bd5109b18 (diff)
Just free compiled pattern if no space is used
-rw-r--r--regcomp.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/regcomp.c b/regcomp.c
index d51163103e..fbef92e18f 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -142,8 +142,13 @@ bitset_on_num(BitSetRef bs)
static void
onig_reg_resize(regex_t *reg)
{
- resize:
- if (reg->alloc > reg->used) {
+ do {
+ if (!reg->used) {
+ xfree(reg->p);
+ reg->alloc = 0;
+ reg->p = 0;
+ }
+ else if (reg->alloc > reg->used) {
unsigned char *new_ptr = xrealloc(reg->p, reg->used);
// Skip the right size optimization if memory allocation fails
if (new_ptr) {
@@ -151,10 +156,7 @@ onig_reg_resize(regex_t *reg)
reg->p = new_ptr;
}
}
- if (reg->chain) {
- reg = reg->chain;
- goto resize;
- }
+ } while ((reg = reg->chain) != 0);
}
extern int