summaryrefslogtreecommitdiffstats
path: root/src/vector.c
diff options
context:
space:
mode:
authorDonald Yandt <donald.yandt@gmail.com>2024-03-02 11:08:00 -0500
committerPablo Neira Ayuso <pablo@netfilter.org>2024-03-04 13:50:27 +0100
commit3fae13ae9e36105d73ba012ea438366a8126e4f5 (patch)
tree42c0a5aee0f09243b770eab76f52cf3140d845e6 /src/vector.c
parente77aa7413d7feb315f9d388f595553af79a56d9d (diff)
conntrackd: prevent memory loss if reallocation fails
Vector data will be lost if reallocation fails, leading to undefined behaviour. Signed-off-by: Donald Yandt <donald.yandt@gmail.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/vector.c')
-rw-r--r--src/vector.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/vector.c b/src/vector.c
index c81e7ce..92a5436 100644
--- a/src/vector.c
+++ b/src/vector.c
@@ -60,13 +60,16 @@ void vector_destroy(struct vector *v)
int vector_add(struct vector *v, void *data)
{
+ void *ptr;
+
if (v->cur_elems >= v->max_elems) {
v->max_elems += DEFAULT_VECTOR_GROWTH;
- v->data = realloc(v->data, v->max_elems * v->size);
- if (v->data == NULL) {
+ ptr = realloc(v->data, v->max_elems * v->size);
+ if (!ptr) {
v->max_elems -= DEFAULT_VECTOR_GROWTH;
return -1;
}
+ v->data = ptr;
}
memcpy(v->data + (v->size * v->cur_elems), data, v->size);
v->cur_elems++;