]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: log: fix regression introduced by commit 8a3f52
authorWilly Tarreau <w@1wt.eu>
Sun, 23 Dec 2012 16:29:07 +0000 (17:29 +0100)
committerWilly Tarreau <w@1wt.eu>
Sun, 23 Dec 2012 16:34:05 +0000 (17:34 +0100)
The commit above improved error reporting during log parsing, but as
a result, some shared strings such as httplog_format are truncated
during parsing. This is observable upon startup because the second
proxy to use httplog emits a warning.

Let's have the logformat parser duplicate the string while parsing it.

src/log.c

index ae7d12217a001d261b9f8e32acc2601ff47053ba..1988a1392cf5bebef4632305f1392b1453bc262a 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -359,9 +359,9 @@ void add_sample_to_logformat_list(char *text, char *arg, int arg_len, struct pro
  *  list_format: the destination list
  *  capabilities: PR_MODE_TCP_ | PR_MODE_HTTP
  */
-void parse_logformat_string(char *str, struct proxy *curproxy, struct list *list_format, int capabilities)
+void parse_logformat_string(char *fmt, struct proxy *curproxy, struct list *list_format, int capabilities)
 {
-       char *sp = str; /* start pointer for text parts */
+       char *sp, *str; /* start pointer for text parts */
        char *arg = NULL; /* start pointer for args */
        char *var = NULL; /* start pointer for vars */
        int arg_len = 0;
@@ -371,6 +371,7 @@ void parse_logformat_string(char *str, struct proxy *curproxy, struct list *list
        struct logformat_node *tmplf, *back;
        int options = 0;
 
+       sp = str = fmt = strdup(fmt);
        curproxy->to_log |= LW_INIT;
 
        /* flush the list first. */
@@ -481,6 +482,8 @@ void parse_logformat_string(char *str, struct proxy *curproxy, struct list *list
 
        if (pformat == LF_STARTVAR || pformat == LF_STARG || pformat == LF_STEXPR)
                Warning("Ignoring end of truncated log-format line after '%s'\n", var ? var : arg ? arg : "%");
+
+       free(fmt);
 }
 
 /*