aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2007-05-01 21:41:48 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2007-05-01 21:41:48 +0000
commit1717cf47f3df5f2d5be305b825702e98b8805fd1 (patch)
tree1dc1b3c6408e20814a492bcbea8f6b8af02f7b38
parent85ef9bc041813fda0888de787aa33a421daab66d (diff)
Merged revisions 62545 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r62545 | tilghman | 2007-05-01 16:34:43 -0500 (Tue, 01 May 2007) | 2 lines Bug 9590 - Memory leaks around find_user() (found by rayjay, different fixes by me) ........ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@62546 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--apps/app_voicemail.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 9ee82427e..521fdc7ea 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -2642,6 +2642,7 @@ static int inboxcount(const char *mailbox, int *newmsgs, int *oldmsgs)
/* No IMAP account available */
if (vmu->imapuser[0] == '\0') {
ast_log (LOG_WARNING,"IMAP user not set for mailbox %s\n",vmu->mailbox);
+ free_user(vmu);
return -1;
}
@@ -2651,6 +2652,7 @@ static int inboxcount(const char *mailbox, int *newmsgs, int *oldmsgs)
ast_log (LOG_DEBUG,"Returning before search - user is logged in\n");
*newmsgs = vms_p->newmessages;
*oldmsgs = vms_p->oldmessages;
+ free_user(vmu);
return 0;
}
@@ -2658,8 +2660,10 @@ static int inboxcount(const char *mailbox, int *newmsgs, int *oldmsgs)
if (!(vms_p = get_vm_state_by_imapuser(vmu->imapuser, 0)) && !(vms_p = get_vm_state_by_mailbox(mailboxnc, 0))) {
if(option_debug > 2)
ast_log (LOG_DEBUG,"Adding new vmstate for %s\n",vmu->imapuser);
- if (!(vms_p = ast_calloc(1, sizeof(*vms_p))))
+ if (!(vms_p = ast_calloc(1, sizeof(*vms_p)))) {
+ free_user(vmu);
return -1;
+ }
ast_copy_string(vms_p->imapuser,vmu->imapuser, sizeof(vms_p->imapuser));
ast_copy_string(vms_p->username, mailboxnc, sizeof(vms_p->username)); /* save for access from interactive entry point */
vms_p->mailstream = NIL; /* save for access from interactive entry point */
@@ -2676,6 +2680,7 @@ static int inboxcount(const char *mailbox, int *newmsgs, int *oldmsgs)
ret = init_mailstream(vms_p, 0);
if (!vms_p->mailstream) {
ast_log (LOG_ERROR,"Houston we have a problem - IMAP mailstream is NULL\n");
+ free_user(vmu);
return -1;
}
@@ -2721,6 +2726,7 @@ static int inboxcount(const char *mailbox, int *newmsgs, int *oldmsgs)
*oldmsgs = vms_p->oldmessages;
}
+ free_user(vmu);
return 0;
}
@@ -8380,7 +8386,8 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s
ast_config_destroy(msg_cfg);
return res;
} else {
- if (find_user(NULL, vmu->context, num)) {
+ struct ast_vm_user vmu2;
+ if (find_user(&vmu2, vmu->context, num)) {
struct leave_vm_options leave_options;
char mailbox[AST_MAX_EXTENSION * 2 + 2];
snprintf(mailbox, sizeof(mailbox), "%s@%s", num, vmu->context);