rendered paste bodyIndex: apps/app_voicemail.c===================================================================--- apps/app_voicemail.c (revision 161347)+++ apps/app_voicemail.c (working copy)@@ -10086,6 +10086,51 @@ AST_LIST_UNLOCK(&zones); } +static char *substitute_escapes(const char *value)+{+ char *current, *result;++ /* Add 16 for fudge factor */+ struct ast_str *str = ast_str_create(strlen(value) + 16);++ /* Substitute strings \r, \n, and \t into the appropriate characters */+ for (current = (char *) value; *current; current++) {+ if (*current == '\\') {+ current++;+ if (!*current) {+ ast_log(AST_LOG_NOTICE, "Incomplete escape at end of value.\n");+ break;+ }+ switch (*current) {+ case 'r':+ ast_str_append(&str, 0, "\r");+ break;+ case 'n':+#ifdef IMAP_STORAGE+ if (str->str[str->used - 1] != '\r') {+ ast_str_append(&str, 0, "\r");+ }+#endif+ ast_str_append(&str, 0, "\n");+ break;+ case 't':+ ast_str_append(&str, 0, "\t");+ break;+ default:+ ast_log(AST_LOG_NOTICE, "Substitution routine does not support this character: \\%c\n", *current);+ break;+ }+ } else {+ ast_str_append(&str, 0, "%c", *current);+ }+ }++ result = ast_strdup(str->str);+ free(str);++ return result;+}+ static int load_config(int reload) { struct ast_vm_user *current;@@ -10690,61 +10735,17 @@ adsiver = atoi(val); } }- if ((val = ast_variable_retrieve(cfg, "general", "emailsubject")))+ if ((val = ast_variable_retrieve(cfg, "general", "emailsubject"))) { emailsubject = ast_strdup(val);+ } if ((val = ast_variable_retrieve(cfg, "general", "emailbody"))) {- char *tmpread, *tmpwrite;- emailbody = ast_strdup(val);-- /* substitute strings \t and \n into the appropriate characters */- tmpread = tmpwrite = emailbody;- while ((tmpwrite = strchr(tmpread,'\\'))) {- switch (tmpwrite[1]) {- case 'r':- memmove(tmpwrite + 1, tmpwrite + 2, strlen(tmpwrite + 2) + 1);- *tmpwrite = '\r';- break;- case 'n':- memmove(tmpwrite + 1, tmpwrite + 2, strlen(tmpwrite + 2) + 1);- *tmpwrite = '\n';- break;- case 't':- memmove(tmpwrite + 1, tmpwrite + 2, strlen(tmpwrite + 2) + 1);- *tmpwrite = '\t';- break;- default:- ast_log(AST_LOG_NOTICE, "Substitution routine does not support this character: %c\n", tmpwrite[1]);- }- tmpread = tmpwrite + 1;- }+ emailbody = substitute_escapes(val); }- if ((val = ast_variable_retrieve(cfg, "general", "pagersubject")))+ if ((val = ast_variable_retrieve(cfg, "general", "pagersubject"))) { pagersubject = ast_strdup(val);+ } if ((val = ast_variable_retrieve(cfg, "general", "pagerbody"))) {- char *tmpread, *tmpwrite;- pagerbody = ast_strdup(val);-- /* substitute strings \t and \n into the appropriate characters */- tmpread = tmpwrite = pagerbody;- while ((tmpwrite = strchr(tmpread, '\\'))) {- switch (tmpwrite[1]) {- case 'r':- memmove(tmpwrite + 1, tmpwrite + 2, strlen(tmpwrite + 2) + 1);- *tmpwrite = '\r';- break;- case 'n':- memmove(tmpwrite + 1, tmpwrite + 2, strlen(tmpwrite + 2) + 1);- *tmpwrite = '\n';- break;- case 't':- memmove(tmpwrite + 1, tmpwrite + 2, strlen(tmpwrite + 2) + 1);- *tmpwrite = '\t';- break;- default:- ast_log(AST_LOG_NOTICE, "Substitution routine does not support this character: %c\n", tmpwrite[1]);- }- tmpread = tmpwrite + 1;- }+ pagerbody = substitute_escapes(val); } AST_LIST_UNLOCK(&users); ast_config_destroy(cfg);