core: fix evaluation of nested ternary operators (closes #1263)
This commit is contained in:
parent
a774ffd4e8
commit
82697714e1
@ -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)
|
||||
|
@ -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)
|
||||
{
|
||||
/*
|
||||
|
@ -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),
|
||||
|
Loading…
x
Reference in New Issue
Block a user