]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
properly detect unterminated
authorAnthony Minessale <anthony.minessale@gmail.com>
Tue, 26 May 2009 18:04:22 +0000 (18:04 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Tue, 26 May 2009 18:04:22 +0000 (18:04 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@13438 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_utils.c
src/switch_xml.c

index d3739d05d355617ad986759c4e1f56f6c5ca3f31..8636008c4993c868cfff6684a4f2e644b983853b 100644 (file)
@@ -261,7 +261,7 @@ SWITCH_DECLARE(char *) switch_find_end_paren(const char *s, char open, char clos
                }
        }
 
-       return (char *) e;
+       return (e && *e == close) ? (char *) e : NULL;
 }
 
 SWITCH_DECLARE(switch_size_t) switch_fd_read_line(int fd, char *buf, switch_size_t len)
index 15f52812dc92d0ac55e89621f2cc5f96f04febac..b68107f4b993c4ed5e2cc8072f237c33fbfa7d42 100644 (file)
@@ -1132,7 +1132,7 @@ SWITCH_DECLARE(switch_xml_t) switch_xml_parse_fd(int fd)
        return &root->xml;
 }
 
-static char *expand_vars(char *buf, char *ebuf, switch_size_t elen, switch_size_t *newlen)
+static char *expand_vars(char *buf, char *ebuf, switch_size_t elen, switch_size_t *newlen, const char **err)
 {
        char *var, *val;
        char *rp = buf;
@@ -1161,6 +1161,8 @@ static char *expand_vars(char *buf, char *ebuf, switch_size_t elen, switch_size_
                                        }
                                }
                                continue;
+                       } else if (err) {
+                               *err = "unterminated ${var}";
                        }
                }
 
@@ -1267,7 +1269,8 @@ static int preprocess(const char *cwd, const char *file, int write_fd, int rleve
        switch_size_t cur = 0, ml = 0;
        char *q, *cmd, buf[2048], ebuf[8192];
        char *tcmd, *targ;
-
+       int line = 0;
+       
        if ((read_fd = open(file, O_RDONLY, 0)) < 0) {
                const char *reason = strerror(errno);
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldnt open %s (%s)\n", file, reason);
@@ -1280,7 +1283,13 @@ static int preprocess(const char *cwd, const char *file, int write_fd, int rleve
 
        while ((cur = switch_fd_read_line(read_fd, buf, sizeof(buf))) > 0) {
                char *arg, *e;
-               char *bp = expand_vars(buf, ebuf, sizeof(ebuf), &cur);
+               const char *err = NULL;
+               char *bp = expand_vars(buf, ebuf, sizeof(ebuf), &cur, &err);
+               line++;
+               
+               if (err && stderr) {
+                       fprintf(stderr, "Error [%s] in line %s line %d\n", err, file, line);
+               }
 
                /* we ignore <include> or </include> for the sake of validators as well as <?xml version="1.0"?> type stuff */
                if (strstr(buf, "<include>") || strstr(buf, "</include>") || strstr(buf, "<?")) {