From 196319170043fddfd701c5f1014be1c058fc5597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Sat, 18 Mar 2017 15:16:32 +0100 Subject: [PATCH] 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. --- src/core/wee-eval.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/core/wee-eval.c b/src/core/wee-eval.c index 91d3bc37a..c54458261 100644 --- a/src/core/wee-eval.c +++ b/src/core/wee-eval.c @@ -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 {