Merged revisions 68595 via svnmerge from
authorTilghman Lesher <tilghman@meg.abyt.es>
Mon, 11 Jun 2007 04:28:08 +0000 (04:28 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Mon, 11 Jun 2007 04:28:08 +0000 (04:28 +0000)
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: https://origsvn.digium.com/svn/asterisk/trunk@68596 65c4cc65-6c06-0410-ace0-fbb531ad65f3

pbx/pbx_config.c

index 79a18da..e2102ee 100644 (file)
@@ -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",