summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Hopps <chopps@labn.net>2023-09-28 18:10:31 +0200
committerChristian Hopps <chopps@labn.net>2023-09-29 07:19:53 +0200
commit53511f252d68834dd8d9285332d0090ca2383562 (patch)
treec8ae1bb517405f954ce65b2e1b2519fb2887ad86
parentMerge pull request #14494 from idryzhov/mgmtd-show-datastore-contents-crash (diff)
downloadfrr-53511f252d68834dd8d9285332d0090ca2383562.tar.xz
frr-53511f252d68834dd8d9285332d0090ca2383562.zip
lib: use XREALLOC over realloc avoid coverity warning
I believe coverity is complaining that the current code does not handle the realloc fail case, in which case the original pointer is not freed, but NULL is returned. The code assert()s it's not failed but that is not strong enough it needs to abort which XREALLOC does and is a better integration into FRR-inrfa anyway. Signed-off-by: Christian Hopps <chopps@labn.net>
-rw-r--r--lib/darr.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/lib/darr.c b/lib/darr.c
index 2c8b7b877..ae3528d22 100644
--- a/lib/darr.c
+++ b/lib/darr.c
@@ -7,8 +7,9 @@
*/
#include <zebra.h>
#include "darr.h"
+#include "memory.h"
-void __dar_resize(void **a, uint count, size_t esize);
+DEFINE_MTYPE_STATIC(LIB, DARR, "Dynamic Array");
static uint _msb(uint count)
{
@@ -56,15 +57,12 @@ void *__darr_resize(void *a, uint count, size_t esize)
uint ncount = darr_next_count(count, esize);
size_t osz = (a == NULL) ? 0 : darr_size(darr_cap(a), esize);
size_t sz = darr_size(ncount, esize);
- struct darr_metadata *dm = realloc(a ? _darr_meta(a) : NULL, sz);
- /* do *not* use a */
+ struct darr_metadata *dm = XREALLOC(MTYPE_DARR,
+ a ? _darr_meta(a) : NULL, sz);
- assert(dm);
if (sz > osz)
memset((char *)dm + osz, 0, sz - osz);
-
dm->cap = ncount;
-
return (void *)(dm + 1);
}