core: prevent infinite loop in evaluation of expression with extra_vars_eval

When extra variables are evaluated, to prevent infinite loop if the evaluated
variable is calling itself, it is removed from hashtable "extra_vars" before
evaluation.
This commit is contained in:
Sébastien Helleu 2017-03-18 15:16:32 +01:00
parent d31e4f1d9a
commit 1963191700

View File

@ -345,10 +345,17 @@ eval_replace_vars_cb (void *data, const char *text)
{
if (extra_vars_eval)
{
return eval_replace_vars (ptr_value, pointers,
extra_vars, extra_vars_eval,
prefix, suffix,
eval_regex);
tmp = strdup (ptr_value);
if (!tmp)
return NULL;
hashtable_remove (extra_vars, text);
value = eval_replace_vars (tmp, pointers,
extra_vars, extra_vars_eval,
prefix, suffix,
eval_regex);
hashtable_set (extra_vars, text, tmp);
free (tmp);
return value;
}
else
{