core: fix evaluation of nested ternary operators (closes #1263)

v2.8-utf8proc
Sébastien Helleu 2018-10-08 22:51:08 +02:00
parent a774ffd4e8
commit 82697714e1
3 changed files with 15 additions and 3 deletions

View File

@ -33,6 +33,7 @@ New features::
Bug fixes::
* core: fix evaluation of nested ternary operators (issue #1263)
* core: fix evaluation of condition when the left operand is an empty string
* core: fix string evaluation with regex replacement when the string is empty
* core: fix check of tags in lines (command /filter and hook_print)

View File

@ -317,7 +317,8 @@ eval_replace_vars_cb (void *data, const char *text)
struct t_config_option *ptr_option;
struct t_gui_buffer *ptr_buffer;
char str_value[512], *value, *pos, *pos1, *pos2, *hdata_name, *list_name;
char *tmp, *info_name, *hide_char, *hidden_string, *error, *condition;
char *tmp, *tmp2, *info_name, *hide_char, *hidden_string, *error;
char *condition;
const char *ptr_value, *ptr_arguments, *ptr_string;
struct t_hdata *hdata;
void *pointer;
@ -556,10 +557,13 @@ eval_replace_vars_cb (void *data, const char *text)
strndup (text + 3, pos - (text + 3)) : strdup (text + 3);
if (!condition)
return strdup ("");
tmp = eval_expression_condition (condition, eval_context);
rc = eval_is_true (tmp);
tmp = eval_replace_vars (condition, eval_context);
tmp2 = eval_expression_condition ((tmp) ? tmp : "", eval_context);
rc = eval_is_true (tmp2);
if (tmp)
free (tmp);
if (tmp2)
free (tmp2);
if (rc)
{
/*

View File

@ -391,6 +391,13 @@ TEST(CoreEval, EvalExpression)
WEE_CHECK_EVAL("yes-no", "${if:5>2?${if:1>7?yes-yes:yes-no}:${if:9>4?no-yes:no-no}}");
WEE_CHECK_EVAL("no-yes", "${if:1>7?${if:6>3?yes-yes:yes-no}:${if:9>4?no-yes:no-no}}");
WEE_CHECK_EVAL("no-no", "${if:1>7?${if:1>7?yes-yes:yes-no}:${if:1>7?no-yes:no-no}}");
WEE_CHECK_EVAL("0", "${if:0}");
WEE_CHECK_EVAL("1", "${if:1}");
WEE_CHECK_EVAL("0", "${if:abc!=abc}");
WEE_CHECK_EVAL("1", "${if:abc==abc}");
WEE_CHECK_EVAL("1", "${if:${if:abc==abc}}");
WEE_CHECK_EVAL("0", "${if:${rev:${if:42==42?hello:bye}}==eyb}");
WEE_CHECK_EVAL("1", "${if:${rev:${if:42==42?hello:bye}}==olleh}");
/* test option */
snprintf (str_value, sizeof (str_value),