From 41289b14bc2cfd2a48d35a380985fbddbe53c8a0 Mon Sep 17 00:00:00 2001 From: Dastan-glitch Date: Sun, 26 Jun 2022 01:04:36 +0000 Subject: [PATCH] bin/ircd: check on CRLF and LF in clean_input_line() & refactor PING --- bin/ircd/src/server.rs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/bin/ircd/src/server.rs b/bin/ircd/src/server.rs index df25ba636..46eaac9ed 100644 --- a/bin/ircd/src/server.rs +++ b/bin/ircd/src/server.rs @@ -173,12 +173,9 @@ impl IrcServerConnection { } } "PING" => { - let line_clone = line.clone(); - let split_line: Vec<&str> = line_clone.split_whitespace().collect(); - if split_line.len() > 1 { - let pong = format!("PONG {}\r\n", split_line[1]); - self.reply(&pong).await?; - } + let pong = tokens.next().ok_or(Error::MalformedPacket)?; + let pong = format!("PONG {}\r\n", pong); + self.reply(&pong).await?; } "PRIVMSG" => { let channel = tokens.next().ok_or(Error::MalformedPacket)?; @@ -339,15 +336,17 @@ impl IrcServerConnection { return Err(Error::ChannelStopped) } - if &line[(line.len() - 2)..] != "\r\n" { + if &line[(line.len() - 2)..] == "\r\n" { + // Remove CRLF + line.pop(); + line.pop(); + } else if &line[(line.len() - 1)..] == "\n" { + line.pop(); + } else { warn!("Closing connection."); return Err(Error::ChannelStopped) } - // Remove CRLF - line.pop(); - line.pop(); - Ok(line.clone()) } }