From badc615a92a3778778c2f14ce8bcc951313b5d9f Mon Sep 17 00:00:00 2001 From: Jokler Date: Wed, 14 Mar 2018 04:50:54 +0100 Subject: Fix escaped backslashes in sed strings --- src/plugins/sed.rs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/sed.rs b/src/plugins/sed.rs index 6f3d0bd..e583811 100644 --- a/src/plugins/sed.rs +++ b/src/plugins/sed.rs @@ -48,6 +48,23 @@ impl Sed { messages.push(message); } + fn format_escaped(&self, input: &str) -> String { + let mut output = String::with_capacity(input.len()); + let mut escape = false; + + for c in input.chars() { + if !escape && c == '\\' { + escape = true; + continue; + } + escape = false; + + output.push(c); + } + + output + } + fn run_regex(&self, channel: &str, message: &str) -> Result { let mut global_match = false; let mut case_insens = false; @@ -58,8 +75,8 @@ impl Sed { let captures = RE.captures(message).unwrap(); debug!("{:?}", captures); - let first = captures.get(1).unwrap().as_str().replace(r"\/", "/"); - let second = captures.get(2).unwrap().as_str().replace(r"\/", "/"); + let first = self.format_escaped(captures.get(1).unwrap().as_str()); + let second = self.format_escaped(captures.get(2).unwrap().as_str()); if let Some(flags) = captures.get(3) { let flags = flags.as_str(); -- cgit v1.2.3-70-g09d2