]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib: use XREALLOC over realloc avoid coverity warning 14508/head
authorChristian Hopps <chopps@labn.net>
Thu, 28 Sep 2023 16:10:31 +0000 (12:10 -0400)
committerChristian Hopps <chopps@labn.net>
Fri, 29 Sep 2023 05:19:53 +0000 (01:19 -0400)
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>
lib/darr.c

index 2c8b7b8778a1c49e3a214ce7c703fdd1af269676..ae3528d224152ede4e3377cddd24c3dce94e3773 100644 (file)
@@ -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);
 }