]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 50150 via svnmerge from
authorTilghman Lesher <tilghman@meg.abyt.es>
Tue, 9 Jan 2007 13:40:45 +0000 (13:40 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Tue, 9 Jan 2007 13:40:45 +0000 (13:40 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r50150 | tilghman | 2007-01-09 07:30:04 -0600 (Tue, 09 Jan 2007) | 4 lines

The advent of realtime has enabled people to use commas in the fullname field.
This could cause an issue with sending voicemails, when the field is unquoted.
(Issue 8595)

........

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@50151 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_voicemail.c

index e87ce97a33c10f27f29e8881b56d42a85e02d395..ea294bc3c696a4daf0441a256130ccd95bc60150 100644 (file)
@@ -1818,6 +1818,22 @@ static void prep_email_sub_vars(struct ast_channel *ast, struct ast_vm_user *vmu
        pbx_builtin_setvar_helper(ast, "VM_CATEGORY", category ? ast_strdupa(category) : "no category");
 }
 
+static char *quote(const char *from, char *to, size_t len)
+{
+       char *ptr = to;
+       *ptr++ = '"';
+       for (; ptr < to + len - 1; from++) {
+               if (*from == '"')
+                       *ptr++ = '\\';
+               else if (*from == '\0')
+                       break;
+               *ptr++ = *from;
+       }
+       if (ptr < to + len - 1)
+               *ptr++ = '"';
+       *ptr = '\0';
+       return to;
+}
 /*
  * fill in *tm for current time according to the proper timezone, if any.
  * Return tm so it can be used as a function argument.
@@ -1866,6 +1882,8 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
        char dur[256];
        char tmpcmd[256];
        struct tm tm;
+       char *passdata2;
+       size_t len_passdata;
 
        gethostname(host, sizeof(host) - 1);
        if (strchr(srcemail, '@'))
@@ -1889,7 +1907,9 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
                                memset(passdata, 0, vmlen);
                                prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, cidnum, cidname, dur, date, passdata, vmlen, category);
                                pbx_substitute_variables_helper(ast, fromstring, passdata, vmlen);
-                               fprintf(p, "From: %s <%s>\r\n", passdata, who);
+                               len_passdata = strlen(passdata) * 2 + 1;
+                               passdata2 = alloca(len_passdata);
+                               fprintf(p, "From: %s <%s>\r\n", quote(passdata, passdata2, len_passdata), who);
                        } else
                                ast_log(LOG_WARNING, "Cannot allocate workspace for variable substitution\n");
                        ast_channel_free(ast);
@@ -1897,7 +1917,9 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
                        ast_log(LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
        } else
                fprintf(p, "From: Asterisk PBX <%s>\r\n", who);
-       fprintf(p, "To: %s <%s>\r\n", vmu->fullname, vmu->email);
+       len_passdata = strlen(vmu->fullname) * 2 + 1;
+       passdata2 = alloca(len_passdata);
+       fprintf(p, "To: %s <%s>\r\n", quote(vmu->fullname, passdata2, len_passdata), vmu->email);
        if (emailsubject) {
                struct ast_channel *ast;
                if ((ast = ast_channel_alloc(0, AST_STATE_DOWN, 0, 0, 0))) {