aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-07-02 20:52:27 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-07-02 20:52:27 +0000
commit912d3b446152fa619158a351eda9edea449f7c96 (patch)
treef2990f2b024439f2defbe516a1629003f1238c9e /apps
parent189ca72283d178368665d201b5ac92a2568dd643 (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.c22
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 {