]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
safe terminal output is sweet.
authorMatt O'Gorman <mogorman@digium.com>
Sat, 11 Nov 2006 02:12:27 +0000 (02:12 +0000)
committerMatt O'Gorman <mogorman@digium.com>
Sat, 11 Nov 2006 02:12:27 +0000 (02:12 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@47491 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/term.h
main/logger.c
main/term.c

index f3c41d8eb9d49c04306bfc7436870add100c3d9e..3b454ce2c406d0fa0e9ac7c965076e465cf2345b 100644 (file)
@@ -59,6 +59,8 @@ char *term_color_code(char *outbuf, int fgcolor, int bgcolor, int maxout);
 
 char *term_strip(char *outbuf, char *inbuf, int maxout);
 
+void term_filter_escapes(char *line);
+
 char *term_prompt(char *outbuf, const char *inbuf, int maxout);
 
 char *term_prep(void);
index 95a768dbd9634ec2a0327f231dd169a762731346..660fb2f741e303c888d0450a88554b2b3bc8036b 100644 (file)
@@ -716,8 +716,10 @@ void ast_log(int level, const char *file, int line, const char *function, const
                        va_start(ap, fmt);
                        res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap);
                        va_end(ap);
-                       if (res != AST_DYNSTR_BUILD_FAILED)
+                       if (res != AST_DYNSTR_BUILD_FAILED) {
+                               term_filter_escapes(buf->str);
                                fputs(buf->str, stdout);
+                       }
                }
                return;
        }
@@ -781,7 +783,8 @@ void ast_log(int level, const char *file, int line, const char *function, const
                                        term_color(tmp2, file, COLOR_BRWHITE, 0, sizeof(tmp2)),
                                        term_color(tmp3, linestr, COLOR_BRWHITE, 0, sizeof(tmp3)),
                                        term_color(tmp4, function, COLOR_BRWHITE, 0, sizeof(tmp4)));
-
+                               /*filter to the console!*/
+                               term_filter_escapes(buf->str);
                                ast_console_puts_mutable(buf->str);
                                
                                va_start(ap, fmt);
@@ -892,6 +895,9 @@ void ast_verbose(const char *fmt, ...)
 
        if (res == AST_DYNSTR_BUILD_FAILED)
                return;
+       
+       /* filter out possibly hazardous escape sequences */
+       term_filter_escapes(buf->str);
 
        AST_LIST_LOCK(&verbosers);
        AST_LIST_TRAVERSE(&verbosers, v, list)
index a38399eda4a0617d560c70b730353df099eb4e1c..e92a27077f2bf4727d9afd0e428a9b7fe203e001 100644 (file)
@@ -264,6 +264,34 @@ char *term_prompt(char *outbuf, const char *inbuf, int maxout)
        return outbuf;
 }
 
+
+/* filter escape sequences */
+void term_filter_escapes(char *line)
+ {
+        int i;
+   
+        for (i=0; i < strlen(line); i++) {
+                if (line[i] == ESC) {                                   
+                        if (line[i+1] == '\x5b') {
+                                switch (line[i+2]) {
+                                       case '\x30':
+                                                break;
+                                        case '\x31':
+                                                break;
+                                        case '\x33':
+                                                break;
+                                        default:
+                                                /* replace ESC with a space */
+                                                line[i] = ' ';
+                                }
+                        } else {
+                                /* replace ESC with a space */
+                                line[i] = ' ';
+                        }
+                } 
+        }
+ }
+
 char *term_prep(void)
 {
        return prepdata;