diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-07-02 20:52:27 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-07-02 20:52:27 +0000 |
commit | 912d3b446152fa619158a351eda9edea449f7c96 (patch) | |
tree | f2990f2b024439f2defbe516a1629003f1238c9e /apps | |
parent | 189ca72283d178368665d201b5ac92a2568dd643 (diff) |
Fix some crashlike bugs because flag could be NULL in play_record_review().
(Closes issue #12892)
Reported by: jaroth
Patch originally by jaroth, fixed by me.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@127564 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rw-r--r-- | apps/app_voicemail.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 291d6f7d9..92c2421e1 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -5128,9 +5128,11 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st int valid_extensions = 0; char *dir; int curmsg; - char *urgent_str = urgent ? "Urgent" : ""; + char urgent_str[7] = ""; char tmptxtfile[PATH_MAX]; + ast_copy_string(urgent_str, urgent ? "Urgent" : "", sizeof(urgent_str)); + if (vms == NULL) return -1; dir = vms->curdir; curmsg = vms->curmsg; @@ -10559,15 +10561,17 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re case '4': if (outsidecaller) { /* only mark vm messages */ /* Mark Urgent */ - if (!ast_strlen_zero(flag) && strcmp(flag, "Urgent")) { + if ((flag && ast_strlen_zero(flag)) || (!ast_strlen_zero(flag) && strcmp(flag, "Urgent"))) { ast_verbose(VERBOSE_PREFIX_3 "marking message as Urgent\n"); ast_debug(1000, "This message is too urgent!\n"); res = ast_play_and_wait(chan, "vm-marked-urgent"); strcpy(flag, "Urgent"); - } else { + } else if (flag) { ast_verbose(VERBOSE_PREFIX_3 "UNmarking message as Urgent\n"); res = ast_play_and_wait(chan, "vm-urgent-removed"); strcpy(flag, ""); + } else { + ast_play_and_wait(chan, "vm-sorry"); } cmd = 0; } else { @@ -10610,8 +10614,10 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re ast_play_and_wait(chan, "vm-msgsaved"); cmd = '0'; } else if (cmd == '4') { - ast_play_and_wait(chan, "vm-marked-urgent"); - strcpy(flag, "Urgent"); + if (flag) { + ast_play_and_wait(chan, "vm-marked-urgent"); + strcpy(flag, "Urgent"); + } ast_play_and_wait(chan, "vm-msgsaved"); cmd = '0'; } else { @@ -10630,10 +10636,10 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re if (message_exists) { cmd = ast_play_and_wait(chan, "vm-review"); if (!cmd && outsidecaller) { - if (!ast_strlen_zero(flag) && strcmp(flag, "Urgent")) { + if ((flag && ast_strlen_zero(flag)) || (!ast_strlen_zero(flag) && strcmp(flag, "Urgent"))) { cmd = ast_play_and_wait(chan, "vm-review-urgent"); - } else { - cmd = ast_play_and_wait(chan, "vm-review-unurgent"); + } else if (flag) { + cmd = ast_play_and_wait(chan, "vm-review-nonurgent"); } } } else { |