summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimmo Saan <simmo.saan@gmail.com>2019-02-21 16:15:58 +0200
committerSimmo Saan <simmo.saan@gmail.com>2019-02-21 16:15:58 +0200
commit8ac4a75969ede80c9d3c9900f376c7d6deb71b07 (patch)
treeaf90a19057fdd5d78166e25001f4667a94f1e542
parent91936ff5831e05d316f8abb5dcb5cd830c46addb (diff)
downloadweechat-8ac4a75969ede80c9d3c9900f376c7d6deb71b07.zip
gui: fix use after free bug in /filter del (issue #1309)
Deleting (freeing) a filter also frees its buffers, so refilter must happen before freeing. Disabling the filter temporarily fixes the bug. This fix disables the filter before filter_removing signal, though.
-rw-r--r--src/core/wee-command.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/core/wee-command.c b/src/core/wee-command.c
index ccbee03d2..aceee8605 100644
--- a/src/core/wee-command.c
+++ b/src/core/wee-command.c
@@ -2399,8 +2399,9 @@ COMMAND_CALLBACK(filter)
ptr_filter = gui_filter_search_by_name (argv[2]);
if (ptr_filter)
{
+ ptr_filter->enabled = 0; // disable before refilter
+ gui_filter_all_buffers (ptr_filter); // refilter before free
gui_filter_free (ptr_filter);
- gui_filter_all_buffers (ptr_filter);
gui_chat_printf_date_tags (NULL, 0, GUI_FILTER_TAG_NO_FILTER,
_("Filter \"%s\" deleted"),
argv[2]);