diff options
author | Donald Yandt <donald.yandt@gmail.com> | 2024-03-02 11:08:00 -0500 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2024-03-04 13:50:27 +0100 |
commit | 3fae13ae9e36105d73ba012ea438366a8126e4f5 (patch) | |
tree | 42c0a5aee0f09243b770eab76f52cf3140d845e6 /src | |
parent | e77aa7413d7feb315f9d388f595553af79a56d9d (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')
-rw-r--r-- | src/vector.c | 7 |
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++; |