diff options
author | Richard Mudgett <rmudgett@digium.com> | 2009-10-08 16:44:33 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2009-10-08 16:44:33 +0000 |
commit | 890d500287ab5cc5ca1b086fdac3da7db64975e7 (patch) | |
tree | 60032e44380ad859428e024cf9f54e40300bd374 /channels | |
parent | 9456ab2724901b565c7cdb19973e5785647a27ba (diff) |
Merged revisions 222797 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r222797 | rmudgett | 2009-10-08 11:33:06 -0500 (Thu, 08 Oct 2009) | 12 lines
Fix memory leak if chan_misdn config parameter is repeated.
Memory leak when the same config option is set more than once in an
misdn.conf section. Why must this be considered? Templates! Defining a
template with default port options and later adding to or overriding some
of them.
Patches:
memleak-misdn.patch
JIRA ABE-1998
........
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@222799 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r-- | channels/misdn_config.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/channels/misdn_config.c b/channels/misdn_config.c index 7d55a17bb..c16650680 100644 --- a/channels/misdn_config.c +++ b/channels/misdn_config.c @@ -908,6 +908,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); @@ -927,18 +930,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 { @@ -957,7 +966,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; } |