From 45f4ee552d64e382d5cffe2aca96ba8909590e59 Mon Sep 17 00:00:00 2001 From: reverse Date: Mon, 17 Aug 2026 14:52:38 +0000 Subject: [PATCH] xline: remove masks case-insensitively, matching how they're enforced --- src/xline.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/xline.rs b/src/xline.rs index 17beff3..7c0da21 100644 --- a/src/xline.rs +++ b/src/xline.rs @@ -272,7 +272,10 @@ impl Server { /// Remove an x-line by kind + mask; returns whether one was found. pub fn remove_xline(&mut self, kind: XKind, mask: &str) -> bool { let before = self.xlines.len(); - self.xlines.retain(|x| !(x.kind == kind && x.mask == mask)); + // case-insensitive: nick/host/channel masks match case-insensitively when + // enforced, so removal must too (e.g. remove `CBAN #foo` for a `#Foo` ban). + self.xlines + .retain(|x| !(x.kind == kind && x.mask.eq_ignore_ascii_case(mask))); let removed = self.xlines.len() < before; if removed { self.save_xlines();