From a1c861e6e0d8171f9a8d7f56ad3ce35152c46420 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Fri, 26 Nov 2010 11:25:02 +0100 Subject: [PATCH] Bugfix: Correctly count variables when parsing the configfile (Thanks dbp) --- src/cfgparse.y | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/cfgparse.y b/src/cfgparse.y index 7818c136..7bbf66bf 100644 --- a/src/cfgparse.y +++ b/src/cfgparse.y @@ -119,14 +119,21 @@ void parse_file(const char *f) { * how much extra bytes it requires when replaced. */ struct Variable *current, *nearest; int extra_bytes = 0; + /* We need to copy the buffer because we need to invalidate the + * variables (otherwise we will count them twice, which is bad when + * 'extra' is negative) */ + char *bufcopy = sstrdup(buf); SLIST_FOREACH(current, &variables, variables) { int extra = (strlen(current->value) - strlen(current->key)); char *next; for (next = buf; (next = strcasestr(buf + (next - buf), current->key)) != NULL; - next += strlen(current->key)) + next += strlen(current->key)) { + *next = '_'; extra_bytes += extra; + } } + FREE(bufcopy); /* Then, allocate a new buffer and copy the file over to the new one, * but replace occurences of our variables */