This allows more concurrent extensions to be copied for a single voicemail,
without creating a possibility of upsetting existing users, where a dialplan
could run out of stack space where it had run fine before. Alternatively,
we could have allocated off the heap, but that is a larger change and would
have increased the chance for instability introduced by this change.
This is really solved starting in 1.6.0.11, as the use of an ast_str buffer
allows an unlimited number of extensions (up to available memory). We
additionally create a new warning message when the buffer length is exceeded,
permitting administrators to see an issue after the fact, whereas previously
the list was silently truncated.
(closes issue #14739)
Reported by: p_lindheimer
Patches:
20090417__bug14739.diff.txt uploaded by tilghman (license 14)
Tested by: p_lindheimer
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@193755
65c4cc65-6c06-0410-ace0-
fbb531ad65f3
char txtfile[PATH_MAX], tmptxtfile[PATH_MAX];
char callerid[256];
FILE *txt;
- char date[256];
+ char date[50];
int txtdes;
int res = 0;
int msgnum;
char fn[PATH_MAX];
char prefile[PATH_MAX] = "";
char tempfile[PATH_MAX] = "";
- char ext_context[256] = "";
+ char ext_context[AST_MAX_EXTENSION + AST_MAX_CONTEXT + 2] = "";
char fmt[80];
char *context;
char ecodes[16] = "#";
- char tmp[1024] = "", *tmpptr;
+ char tmp[1324] = "", *tmpptr;
struct ast_vm_user *vmu;
struct ast_vm_user svm;
const char *category = NULL;
+ if (strlen(ext) > sizeof(tmp) - 1) {
+ ast_log(LOG_WARNING, "List of extensions is too long (>%ld). Truncating.\n", (long) sizeof(tmp) - 1);
+ }
ast_copy_string(tmp, ext, sizeof(tmp));
ext = tmp;
context = strchr(tmp, '@');