diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-06-11 04:28:08 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-06-11 04:28:08 +0000 |
commit | 1c3d96abeccab17bf1354118041275035e2c35d1 (patch) | |
tree | 34f4f66101c4e855f512c3dd66db42f7eb823f6e /pbx/pbx_config.c | |
parent | 9d87273d60b56de573845dc9714769ac9f7a9d15 (diff) |
Merged revisions 68595 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r68595 | tilghman | 2007-06-10 23:21:30 -0500 (Sun, 10 Jun 2007) | 2 lines
"dialplan save" produced garbage in the config file
........
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@68596 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'pbx/pbx_config.c')
-rw-r--r-- | pbx/pbx_config.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/pbx/pbx_config.c b/pbx/pbx_config.c index 79a18da0b..e2102ee04 100644 --- a/pbx/pbx_config.c +++ b/pbx/pbx_config.c @@ -851,16 +851,27 @@ static int handle_save_dialplan(int fd, int argc, char *argv[]) ast_get_extension_app(p)); } else { /* copy and replace '|' with ',' */ const char *sep, *cid; - char *tempdata; + char *tempdata = ""; char *s; const char *el = ast_get_extension_label(p); - char label[128]; + char label[128] = ""; - tempdata = ast_strdupa(ast_get_extension_app_data(p)); - - for (s = tempdata; *s; s++) { - if (*s == '|') - *s = ','; + s = ast_get_extension_app_data(p); + if (s) { + char *t; + tempdata = alloca(strlen(tempdata) * 2 + 1); + + for (t = tempdata; *s; s++, t++) { + if (*s == '|') + *t = ','; + else { + if (*s == ',') + *t++ = '\\'; + *t = *s; + } + } + /* Terminating NULL */ + *t = *s; } if (ast_get_extension_matchcid(p)) { @@ -869,7 +880,7 @@ static int handle_save_dialplan(int fd, int argc, char *argv[]) } else sep = cid = ""; - if (el && (snprintf(label, 127, "(%s)", el) != (strlen(el) + 2))) + if (el && (snprintf(label, sizeof(label), "(%s)", el) != (strlen(el) + 2))) incomplete = 1; /* error encountered or label > 125 chars */ fprintf(output, "exten => %s%s%s,%d%s,%s(%s)\n", |