Author: wdoekes Date: Wed Aug 13 02:50:34 2014 New Revision: 420898 URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=420898 Log: logger: Don't store verbose-magic in the log files.
In r399267, the verbose2magic stuff was edited. This time it results in magic characters in the log files for multiline messages. In trunk (and 13) this was fixed by the "stripping" of those characters from multiline messages (in r414798). This is a backport of that fix to 11. That fix is altered to actually strip the characters and not replace them with blanks. Review: https://reviewboard.asterisk.org/r/3901/ Review: https://reviewboard.asterisk.org/r/3902/ ........ Merged revisions 420897 from http://svn.asterisk.org/svn/asterisk/branches/11 Modified: branches/12/ (props changed) branches/12/main/logger.c Propchange: branches/12/ ------------------------------------------------------------------------------ Binary property 'branch-11-merged' - no diff available. Modified: branches/12/main/logger.c URL: http://svnview.digium.com/svn/asterisk/branches/12/main/logger.c?view=diff&rev=420898&r1=420897&r2=420898 ============================================================================== --- branches/12/main/logger.c (original) +++ branches/12/main/logger.c Wed Aug 13 02:50:34 2014 @@ -87,7 +87,7 @@ static void unique_callid_cleanup(void *data); struct ast_callid { - int call_identifier; /* Numerical value of the call displayed in the logs */ + int call_identifier; /* Numerical value of the call displayed in the logs */ }; AST_THREADSTORAGE_CUSTOM(unique_callid, NULL, unique_callid_cleanup); @@ -1055,25 +1055,58 @@ syslog(syslog_level, "%s", buf); } +static char *logger_strip_verbose_magic(const char *message, int level) +{ + const char *begin, *end; + char *stripped_message, *dst; + char magic = -(level + 1); + + if (!(stripped_message = ast_malloc(strlen(message) + 1))) { + return NULL; + } + + begin = message; + dst = stripped_message; + do { + end = strchr(begin, magic); + if (end) { + size_t len = end - begin; + memcpy(dst, begin, len); + begin = end + 1; + dst += len; + } else { + strcpy(dst, begin); /* safe */ + break; + } + } while (1); + + return stripped_message; +} + /*! \brief Print a normal log message to the channels */ static void logger_print_normal(struct logmsg *logmsg) { struct logchannel *chan = NULL; char buf[BUFSIZ]; struct verb *v = NULL; + char *tmpmsg; int level = 0; if (logmsg->level == __LOG_VERBOSE) { - char *tmpmsg = ast_strdupa(logmsg->message + 1); - - level = VERBOSE_MAGIC2LEVEL(logmsg->message); /* Iterate through the list of verbosers and pass them the log message string */ AST_RWLIST_RDLOCK(&verbosers); AST_RWLIST_TRAVERSE(&verbosers, v, list) v->verboser(logmsg->message); AST_RWLIST_UNLOCK(&verbosers); - ast_string_field_set(logmsg, message, tmpmsg); + + level = VERBOSE_MAGIC2LEVEL(logmsg->message); + + tmpmsg = logger_strip_verbose_magic(logmsg->message, level); + if (tmpmsg) { + ast_string_field_set(logmsg, message, tmpmsg); + ast_free(tmpmsg); + } } AST_RWLIST_RDLOCK(&logchannels); -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits