]> jfr.im git - irc/weechat/weechat.git/commitdiff
trigger: fix recursive calls to triggers using regex (closes #1546)
authorSébastien Helleu <redacted>
Fri, 31 Jul 2020 18:50:33 +0000 (20:50 +0200)
committerSébastien Helleu <redacted>
Fri, 31 Jul 2020 18:50:33 +0000 (20:50 +0200)
ChangeLog.adoc
src/plugins/trigger/trigger-callback.c

index 768ea3df9df72ac6041ad580e89be062b014ac5a..b6c265308cb29cc44f4e1ef3a44c4ab87b5ff2b0 100644 (file)
@@ -27,6 +27,7 @@ New features::
 Bug fixes::
 
   * core: do not add line with highlight and tag "notify_none" to hotlist (issue #1529)
+  * trigger: fix recursive calls to triggers using regex (issue #1546)
   * trigger: add `${tg_tags} !!- ,notify_none,` in conditions of default trigger "beep" (issue #1529)
 
 [[v2.9]]
index 995daa6c1d0e046d5a52577fbd3975defa0957c2..ada2549118f7a97fc4c5327f09a0afe50f68e7d4 100644 (file)
@@ -33,9 +33,6 @@
 /* hashtable used to evaluate "conditions" */
 struct t_hashtable *trigger_callback_hashtable_options_conditions = NULL;
 
-/* hashtable used to replace with regex */
-struct t_hashtable *trigger_callback_hashtable_options_regex = NULL;
-
 
 /*
  * Parses an IRC message.
@@ -233,6 +230,7 @@ trigger_callback_replace_regex (struct t_trigger *trigger,
     char *value;
     const char *ptr_key, *ptr_value;
     int i, pointers_allocated;
+    struct t_hashtable *hashtable_options_regex;
 
     pointers_allocated = 0;
 
@@ -283,8 +281,14 @@ trigger_callback_replace_regex (struct t_trigger *trigger,
             ptr_value = weechat_hashtable_get (extra_vars, ptr_key);
         }
 
+        hashtable_options_regex = weechat_hashtable_new (
+            32,
+            WEECHAT_HASHTABLE_STRING,
+            WEECHAT_HASHTABLE_STRING,
+            NULL, NULL);
+
         weechat_hashtable_set (pointers, "regex", trigger->regex[i].regex);
-        weechat_hashtable_set (trigger_callback_hashtable_options_regex,
+        weechat_hashtable_set (hashtable_options_regex,
                                "regex_replace",
                                trigger->regex[i].replace_escaped);
 
@@ -292,7 +296,9 @@ trigger_callback_replace_regex (struct t_trigger *trigger,
             ptr_value,
             pointers,
             extra_vars,
-            trigger_callback_hashtable_options_regex);
+            hashtable_options_regex);
+
+        weechat_hashtable_free (hashtable_options_regex);
 
         if (value)
         {
@@ -1284,12 +1290,6 @@ trigger_callback_init ()
         weechat_hashtable_set (trigger_callback_hashtable_options_conditions,
                                "type", "condition");
     }
-
-    trigger_callback_hashtable_options_regex = weechat_hashtable_new (
-        32,
-        WEECHAT_HASHTABLE_STRING,
-        WEECHAT_HASHTABLE_STRING,
-        NULL, NULL);
 }
 
 /*
@@ -1301,6 +1301,4 @@ trigger_callback_end ()
 {
     if (trigger_callback_hashtable_options_conditions)
         weechat_hashtable_free (trigger_callback_hashtable_options_conditions);
-    if (trigger_callback_hashtable_options_regex)
-        weechat_hashtable_free (trigger_callback_hashtable_options_regex);
 }