Merged revisions 222799 via svnmerge from

https://origsvn.digium.com/svn/asterisk/trunk

................
  r222799 | rmudgett | 2009-10-08 11:44:33 -0500 (Thu, 08 Oct 2009) | 19 lines
  
  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/branches/1.6.2@222802 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.2
Richard Mudgett 16 years ago
parent 8aa78b7f88
commit d284dae6e3

@ -875,6 +875,9 @@ static int _parse (union misdn_cfg_pt *dest, const char *value, enum misdn_cfg_t
switch (type) { switch (type) {
case MISDN_CTYPE_STR: case MISDN_CTYPE_STR:
if (dest->str) {
ast_free(dest->str);
}
if ((len = strlen(value))) { if ((len = strlen(value))) {
dest->str = ast_malloc((len + 1) * sizeof(char)); dest->str = ast_malloc((len + 1) * sizeof(char));
strncpy(dest->str, value, len); 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); res = sscanf(value, "%30d", &tmp);
} }
if (res) { if (res) {
dest->num = ast_malloc(sizeof(int)); if (!dest->num) {
dest->num = ast_malloc(sizeof(int));
}
memcpy(dest->num, &tmp, sizeof(int)); memcpy(dest->num, &tmp, sizeof(int));
} else } else
re = -1; re = -1;
} }
break; break;
case MISDN_CTYPE_BOOL: 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); *(dest->num) = (ast_true(value) ? 1 : 0);
break; break;
case MISDN_CTYPE_BOOLINT: case MISDN_CTYPE_BOOLINT:
dest->num = ast_malloc(sizeof(int)); if (!dest->num) {
dest->num = ast_malloc(sizeof(int));
}
if (sscanf(value, "%30d", &tmp)) { if (sscanf(value, "%30d", &tmp)) {
memcpy(dest->num, &tmp, sizeof(int)); memcpy(dest->num, &tmp, sizeof(int));
} else { } else {
@ -924,7 +933,9 @@ static int _parse (union misdn_cfg_pt *dest, const char *value, enum misdn_cfg_t
} }
break; break;
case MISDN_CTYPE_ASTGROUP: 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); *(dest->grp) = ast_get_group(value);
break; break;
} }

Loading…
Cancel
Save