diff --git a/src/include/switch_utils.h b/src/include/switch_utils.h index 5ff584bd0c..1c40975908 100644 --- a/src/include/switch_utils.h +++ b/src/include/switch_utils.h @@ -1338,6 +1338,12 @@ SWITCH_DECLARE(void) switch_split_time(const char *exp, int *hour, int *min, int */ SWITCH_DECLARE(int) switch_split_user_domain(char *in, char **user, char **domain); +SWITCH_DECLARE(void *) switch_calloc(size_t nmemb, size_t size); + +#ifdef __clang_analyzer__ +#define calloc switch_calloc +#endif + /* malloc or DIE macros */ #ifdef NDEBUG #define switch_malloc(ptr, len) (void)( (!!(ptr = malloc(len))) || (fprintf(stderr,"ABORT! Malloc failure at: %s:%d", __FILE__, __LINE__),abort(), 0), ptr ) diff --git a/src/switch_event.c b/src/switch_event.c index 91e07c6b79..a29ac78858 100644 --- a/src/switch_event.c +++ b/src/switch_event.c @@ -503,7 +503,13 @@ SWITCH_DECLARE(switch_status_t) switch_event_reserve_subclass_detailed(const cha subclass->owner = DUP(owner); subclass->name = DUP(subclass_name); - switch_core_hash_insert(CUSTOM_HASH, subclass->name, subclass); + status = switch_core_hash_insert(CUSTOM_HASH, subclass->name, subclass); + + if (status != SWITCH_STATUS_SUCCESS) { + free(subclass->owner); + free(subclass->name); + free(subclass); + } end: diff --git a/src/switch_utils.c b/src/switch_utils.c index 2e249d6593..e6e4917b1e 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -71,6 +71,11 @@ struct switch_network_list { char *name; }; +SWITCH_DECLARE(void *) switch_calloc(size_t nmemb, size_t size) +{ + return calloc(nmemb, size); +} + #ifndef WIN32 SWITCH_DECLARE(int) switch_inet_pton(int af, const char *src, void *dst) {