summaryrefslogtreecommitdiff
path: root/optimize.c
diff options
context:
space:
mode:
authorPhilippe Antoine <contact@catenacyber.fr>2019-06-15 15:54:03 +0200
committerPhilippe Antoine <contact@catenacyber.fr>2019-06-15 15:54:03 +0200
commit3a48c915ea98a60fbac94522202279f56c740487 (patch)
tree5d1a29f8a5933b420e00c6a8c9c41c9488d95e69 /optimize.c
parent2e9d0ae34ece4d6f67f4d66a4c3628febf0b13dd (diff)
downloadlibpcap-3a48c915ea98a60fbac94522202279f56c740487.tar.gz
Fixes bould free in opt_cleanup
Diffstat (limited to 'optimize.c')
-rw-r--r--optimize.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/optimize.c b/optimize.c
index 4afd063f..931655cd 100644
--- a/optimize.c
+++ b/optimize.c
@@ -2051,12 +2051,18 @@ intern_blocks(opt_state_t *opt_state, struct icode *ic)
static void
opt_cleanup(opt_state_t *opt_state)
{
- free((void *)opt_state->vnode_base);
- free((void *)opt_state->vmap);
- free((void *)opt_state->edges);
- free((void *)opt_state->space);
- free((void *)opt_state->levels);
- free((void *)opt_state->blocks);
+ if (opt_state->vnode_base)
+ free((void *)opt_state->vnode_base);
+ if (opt_state->vmap)
+ free((void *)opt_state->vmap);
+ if (opt_state->edges)
+ free((void *)opt_state->edges);
+ if (opt_state->space)
+ free((void *)opt_state->space);
+ if (opt_state->levels)
+ free((void *)opt_state->levels);
+ if (opt_state->blocks)
+ free((void *)opt_state->blocks);
}
/*
@@ -2183,6 +2189,7 @@ opt_init(opt_state_t *opt_state, struct icode *ic)
opt_state->edges = (struct edge **)calloc(opt_state->n_edges, sizeof(*opt_state->edges));
if (opt_state->edges == NULL) {
free(opt_state->blocks);
+ opt_state->blocks = NULL;
opt_error(opt_state, "malloc");
}
@@ -2193,6 +2200,8 @@ opt_init(opt_state_t *opt_state, struct icode *ic)
if (opt_state->levels == NULL) {
free(opt_state->edges);
free(opt_state->blocks);
+ opt_state->edges = NULL;
+ opt_state->blocks = NULL;
opt_error(opt_state, "malloc");
}
@@ -2206,6 +2215,9 @@ opt_init(opt_state_t *opt_state, struct icode *ic)
free(opt_state->levels);
free(opt_state->edges);
free(opt_state->blocks);
+ opt_state->levels = NULL;
+ opt_state->edges = NULL;
+ opt_state->blocks = NULL;
opt_error(opt_state, "malloc");
}
p = opt_state->space;
@@ -2249,6 +2261,10 @@ opt_init(opt_state_t *opt_state, struct icode *ic)
free(opt_state->levels);
free(opt_state->edges);
free(opt_state->blocks);
+ opt_state->space = NULL;
+ opt_state->levels = NULL;
+ opt_state->edges = NULL;
+ opt_state->blocks = NULL;
opt_error(opt_state, "malloc");
}
opt_state->vnode_base = (struct valnode *)calloc(opt_state->maxval, sizeof(*opt_state->vnode_base));
@@ -2258,6 +2274,11 @@ opt_init(opt_state_t *opt_state, struct icode *ic)
free(opt_state->levels);
free(opt_state->edges);
free(opt_state->blocks);
+ opt_state->vmap = NULL;
+ opt_state->space = NULL;
+ opt_state->levels = NULL;
+ opt_state->edges = NULL;
+ opt_state->blocks = NULL;
opt_error(opt_state, "malloc");
}
}