Index: apps/app_voicemail.c =================================================================== --- apps/app_voicemail.c (revision 115812) +++ apps/app_voicemail.c (working copy) @@ -571,6 +571,22 @@ static char emaildateformat[32] = "%A, %B %d, %Y at %r"; +static char *strip_control(const char *input, char *buf, size_t buflen) +{ + char *bufptr = buf; + for (; *input; input++) { + if (*input < 32) { + continue; + } + *bufptr++ = *input; + if (bufptr == buf + buflen - 1) { + break; + } + } + *bufptr = '\0'; + return buf; +} + static void populate_defaults(struct ast_vm_user *vmu) { ast_copy_flags(vmu, (&globalflags), AST_FLAGS_ALL); @@ -1790,6 +1806,7 @@ char fname[256]; char dur[256]; char tmpcmd[256]; + char enc_cidnum[256], enc_cidname[256]; struct tm tm; char *passdata2; size_t len_passdata; @@ -1799,6 +1816,8 @@ #define ENDL "\n" #endif + strip_control(cidnum, enc_cidnum, sizeof(enc_cidnum)); + strip_control(cidname, enc_cidname, sizeof(enc_cidname)); gethostname(host, sizeof(host) - 1); if (strchr(srcemail, '@')) ast_copy_string(who, srcemail, sizeof(who)); @@ -1819,7 +1838,7 @@ int vmlen = strlen(fromstring)*3 + 200; if ((passdata = alloca(vmlen))) { memset(passdata, 0, vmlen); - prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, cidnum, cidname, dur, date, passdata, vmlen, category); + prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, enc_cidnum, enc_cidname, dur, date, passdata, vmlen, category); pbx_substitute_variables_helper(ast, fromstring, passdata, vmlen); len_passdata = strlen(passdata) * 2 + 3; passdata2 = alloca(len_passdata); @@ -1866,8 +1885,8 @@ fprintf(p, "X-Asterisk-VM-Extension: %s" ENDL, mailbox); fprintf(p, "X-Asterisk-VM-Priority: %d" ENDL, chan->priority); fprintf(p, "X-Asterisk-VM-Caller-channel: %s" ENDL, chan->name); - fprintf(p, "X-Asterisk-VM-Caller-ID-Num: %s" ENDL, cidnum); - fprintf(p, "X-Asterisk-VM-Caller-ID-Name: %s" ENDL, cidname); + fprintf(p, "X-Asterisk-VM-Caller-ID-Num: %s" ENDL, enc_cidnum); + fprintf(p, "X-Asterisk-VM-Caller-ID-Name: %s" ENDL, enc_cidname); fprintf(p, "X-Asterisk-VM-Duration: %d" ENDL, duration); if (!ast_strlen_zero(category)) fprintf(p, "X-Asterisk-VM-Category: %s" ENDL, category); @@ -1875,9 +1894,9 @@ fprintf(p, "X-Asterisk-VM-Orig-time: %ld" ENDL, (long)time(NULL)); } if (!ast_strlen_zero(cidnum)) - fprintf(p, "X-Asterisk-CallerID: %s" ENDL, cidnum); + fprintf(p, "X-Asterisk-CallerID: %s" ENDL, enc_cidnum); if (!ast_strlen_zero(cidname)) - fprintf(p, "X-Asterisk-CallerIDName: %s" ENDL, cidname); + fprintf(p, "X-Asterisk-CallerIDName: %s" ENDL, enc_cidname); fprintf(p, "MIME-Version: 1.0" ENDL); if (attach_user_voicemail) { /* Something unique. */