From 4b883177dc025db24473e62469f97631a12ad536 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Fri, 1 Jan 2021 20:09:10 -0500 Subject: Split ignore fields to avoid over-eager * matching Split ignore fields and match each separately to avoid an early * eagerly matching across several fields. For example, "* JOIN * *" should not match messages which happen to contain the word "JOIN" followed by two other words. Ignore capacity is reduced to 64 to keep the size of the array the same. I don't think it's an issue. --- command.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'command.c') diff --git a/command.c b/command.c index 43870f1..c71bebc 100644 --- a/command.c +++ b/command.c @@ -388,16 +388,19 @@ static void commandCopy(uint id, char *params) { static void commandIgnore(uint id, char *params) { if (params) { - const char *pattern = ignoreAdd(params); + struct Ignore ignore = ignoreAdd(params); uiFormat( - id, Cold, NULL, "Ignoring \3%02d%s\3", - Brown, pattern + id, Cold, NULL, "Ignoring \3%02d%s %s %s %s", + Brown, ignore.mask, + (ignore.cmd ?: ""), (ignore.chan ?: ""), (ignore.mesg ?: "") ); } else { - for (size_t i = 0; i < ignore.len; ++i) { + for (size_t i = 0; i < IgnoreCap && ignores[i].mask; ++i) { uiFormat( - Network, Warm, NULL, "Ignoring \3%02d%s\3", - Brown, ignore.patterns[i] + Network, Warm, NULL, "Ignoring \3%02d%s %s %s %s", + Brown, ignores[i].mask, + (ignores[i].cmd ?: ""), (ignores[i].chan ?: ""), + (ignores[i].mesg ?: "") ); } } @@ -405,14 +408,13 @@ static void commandIgnore(uint id, char *params) { static void commandUnignore(uint id, char *params) { if (!params) return; - if (ignoreRemove(params)) { - uiFormat( - id, Cold, NULL, "No longer ignoring \3%02d%s\3", - Brown, params - ); - } else { - uiFormat(id, Cold, NULL, "Not ignoring \3%02d%s\3", Brown, params); - } + struct Ignore ignore = ignoreParse(params); + bool found = ignoreRemove(ignore); + uiFormat( + id, Cold, NULL, "%s ignoring \3%02d%s %s %s %s", + (found ? "No longer" : "Not"), Brown, ignore.mask, + (ignore.cmd ?: ""), (ignore.chan ?: ""), (ignore.mesg ?: "") + ); } static void commandExec(uint id, char *params) { -- cgit 1.4.1