mirror of
https://github.com/asterisk/asterisk.git
synced 2026-07-28 00:10:25 -07:00
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/branches/1.4@222797 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
+15
-4
@@ -878,6 +878,9 @@ static int _parse (union misdn_cfg_pt *dest, char *value, enum misdn_cfg_type ty
|
||||
|
||||
switch (type) {
|
||||
case MISDN_CTYPE_STR:
|
||||
if (dest->str) {
|
||||
free(dest->str);
|
||||
}
|
||||
if ((len = strlen(value))) {
|
||||
dest->str = (char *)malloc((len + 1) * sizeof(char));
|
||||
strncpy(dest->str, value, len);
|
||||
@@ -895,18 +898,24 @@ static int _parse (union misdn_cfg_pt *dest, char *value, enum misdn_cfg_type ty
|
||||
else
|
||||
pat="%30d";
|
||||
if (sscanf(value, pat, &tmp)) {
|
||||
dest->num = (int *)malloc(sizeof(int));
|
||||
if (!dest->num) {
|
||||
dest->num = (int *)malloc(sizeof(int));
|
||||
}
|
||||
memcpy(dest->num, &tmp, sizeof(int));
|
||||
} else
|
||||
re = -1;
|
||||
}
|
||||
break;
|
||||
case MISDN_CTYPE_BOOL:
|
||||
dest->num = (int *)malloc(sizeof(int));
|
||||
if (!dest->num) {
|
||||
dest->num = (int *)malloc(sizeof(int));
|
||||
}
|
||||
*(dest->num) = (ast_true(value) ? 1 : 0);
|
||||
break;
|
||||
case MISDN_CTYPE_BOOLINT:
|
||||
dest->num = (int *)malloc(sizeof(int));
|
||||
if (!dest->num) {
|
||||
dest->num = (int *)malloc(sizeof(int));
|
||||
}
|
||||
if (sscanf(value, "%30d", &tmp)) {
|
||||
memcpy(dest->num, &tmp, sizeof(int));
|
||||
} else {
|
||||
@@ -925,7 +934,9 @@ static int _parse (union misdn_cfg_pt *dest, char *value, enum misdn_cfg_type ty
|
||||
}
|
||||
break;
|
||||
case MISDN_CTYPE_ASTGROUP:
|
||||
dest->grp = (ast_group_t *)malloc(sizeof(ast_group_t));
|
||||
if (!dest->grp) {
|
||||
dest->grp = (ast_group_t *)malloc(sizeof(ast_group_t));
|
||||
}
|
||||
*(dest->grp) = ast_get_group(value);
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user