diff --git a/channels/misdn_config.c b/channels/misdn_config.c index 8aa9a0acf0..4a90bbec1e 100644 --- a/channels/misdn_config.c +++ b/channels/misdn_config.c @@ -875,6 +875,9 @@ static int _parse (union misdn_cfg_pt *dest, const char *value, enum misdn_cfg_t switch (type) { case MISDN_CTYPE_STR: + if (dest->str) { + ast_free(dest->str); + } if ((len = strlen(value))) { dest->str = ast_malloc((len + 1) * sizeof(char)); strncpy(dest->str, value, len); @@ -894,18 +897,24 @@ static int _parse (union misdn_cfg_pt *dest, const char *value, enum misdn_cfg_t res = sscanf(value, "%30d", &tmp); } if (res) { - dest->num = ast_malloc(sizeof(int)); + if (!dest->num) { + dest->num = ast_malloc(sizeof(int)); + } memcpy(dest->num, &tmp, sizeof(int)); } else re = -1; } break; case MISDN_CTYPE_BOOL: - dest->num = ast_malloc(sizeof(int)); + if (!dest->num) { + dest->num = ast_malloc(sizeof(int)); + } *(dest->num) = (ast_true(value) ? 1 : 0); break; case MISDN_CTYPE_BOOLINT: - dest->num = ast_malloc(sizeof(int)); + if (!dest->num) { + dest->num = ast_malloc(sizeof(int)); + } if (sscanf(value, "%30d", &tmp)) { memcpy(dest->num, &tmp, sizeof(int)); } else { @@ -924,7 +933,9 @@ static int _parse (union misdn_cfg_pt *dest, const char *value, enum misdn_cfg_t } break; case MISDN_CTYPE_ASTGROUP: - dest->grp = ast_malloc(sizeof(ast_group_t)); + if (!dest->grp) { + dest->grp = ast_malloc(sizeof(ast_group_t)); + } *(dest->grp) = ast_get_group(value); break; }