From 0d41098ffaf5ecb58c06471569a0867f13fc1ab0 Mon Sep 17 00:00:00 2001 From: jpeeler Date: Fri, 12 Nov 2010 20:52:06 +0000 Subject: Merged revisions 294904 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.6.2 ................ r294904 | jpeeler | 2010-11-12 14:51:15 -0600 (Fri, 12 Nov 2010) | 23 lines Merged revisions 294903 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r294903 | jpeeler | 2010-11-12 14:49:09 -0600 (Fri, 12 Nov 2010) | 16 lines Fix regression causing abort in voicemail after opening a mailbox with no mesgs. In order to be more safe, some error handling code was changed to respect more error conditions including the potential memory allocation failure for deleted and heard message tracking introduced in 293004. However, last_message_index returns -1 for zero messages (perhaps as expected) and was triggering the stricter error checking. Because last_message_index is only called directly in one place, just return 0 from open_mailbox (for file based storage) when no messages are detected unless a real error has occurred. (closes issue #18240) Reported by: leobrown Patches: bug18240.1-6-2.diff.txt uploaded by alecdavis (license 585) Tested by: pabelanger ........ ................ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.8@294905 f38db490-d61c-443f-a65b-d21fe96a405b --- apps/app_voicemail.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'apps') diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index cda1d74bb..b22d3618c 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -2623,6 +2623,7 @@ static int open_mailbox(struct vm_state *vms, struct ast_vm_user *vmu, int box) ast_log(LOG_WARNING, "The code expects the old messages to be checked first, fix the code.\n"); } if (vm_allocate_dh(vms, vmu, box == 0 ? vms->vmArrayIndex + vms->oldmessages : vms->lastmsg)) { + ast_mutex_unlock(&vms->lock); return -1; } @@ -7710,7 +7711,7 @@ static int open_mailbox(struct vm_state *vms, struct ast_vm_user *vmu, int box) last_msg = last_message_index(vmu, vms->curdir); ast_unlock_path(vms->curdir); - if (last_msg < 0) { + if (last_msg < -1) { return last_msg; } else if (vms->lastmsg != last_msg) { ast_log(LOG_NOTICE, "Mailbox: %s, expected %d but found %d message(s) in box with max threshold of %d.\n", vms->curdir, last_msg + 1, vms->lastmsg + 1, vmu->maxmsg); -- cgit v1.2.3