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.
diff --git a/src/log.c b/src/log.c
index ae7d122..1988a13 100644
--- a/src/log.c
+++ b/src/log.c
@@ -359,9 +359,9 @@
* 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 @@
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 @@
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);
}
/*