From 3ed22a43905dd449732398af7b9db4a24b310fab Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sun, 23 Dec 2012 17:29:07 +0100 Subject: [PATCH] BUG/MINOR: log: fix regression introduced by commit 8a3f52 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 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/log.c b/src/log.c index ae7d12217..1988a1392 100644 --- 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); } /*