From efc65bf46a5db2c6025915ce6ca12389d3ae5b9e Mon Sep 17 00:00:00 2001 From: SpiralP Date: Sat, 25 Apr 2020 00:39:30 -0700 Subject: [PATCH] gross fix for short messages crashing --- src/chat/hidden_communication/clients.rs | 10 +++++++--- src/chat/hidden_communication/whispers/incoming.rs | 14 ++++++++------ src/chat/hidden_communication/whispers/outgoing.rs | 14 ++++++++------ 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/chat/hidden_communication/clients.rs b/src/chat/hidden_communication/clients.rs index 26520db..cb87189 100644 --- a/src/chat/hidden_communication/clients.rs +++ b/src/chat/hidden_communication/clients.rs @@ -55,7 +55,10 @@ async fn do_query() -> Result<()> { timeout(Duration::from_secs(5), async { loop { let message = wait_for_message().await; - if &message.as_bytes()[0..1] == b"&" && &message.as_bytes()[2..] == b"Players using:" { + if message.len() >= 2 + && (&message.as_bytes()[0..1] == b"&" + && &message.as_bytes()[2..] == b"Players using:") + { SHOULD_BLOCK.set(true); break; } @@ -70,8 +73,9 @@ async fn do_query() -> Result<()> { let timeout_result = timeout(Duration::from_secs(5), async { loop { let message = wait_for_message().await; - if (&message.as_bytes()[0..1] == b"&" && &message.as_bytes()[2..4] == b" ") - || &message.as_bytes()[0..3] == b"> &" + if message.len() >= 4 + && ((&message.as_bytes()[0..1] == b"&" && &message.as_bytes()[2..4] == b" ") + || &message.as_bytes()[0..3] == b"> &") { // probably a /clients response messages.push(message.to_string()); diff --git a/src/chat/hidden_communication/whispers/incoming.rs b/src/chat/hidden_communication/whispers/incoming.rs index 778c5a2..b740ad2 100644 --- a/src/chat/hidden_communication/whispers/incoming.rs +++ b/src/chat/hidden_communication/whispers/incoming.rs @@ -24,9 +24,10 @@ async fn step() -> Result<()> { let message = wait_for_message().await; // incoming whisper - if &message.as_bytes()[0..1] == b"&" - && &message.as_bytes()[2..6] == b"[>] " - && message.ends_with(": &f?CEF?") + if message.len() >= 6 + && (&message.as_bytes()[0..1] == b"&" + && &message.as_bytes()[2..6] == b"[>] " + && message.ends_with(": &f?CEF?")) { SHOULD_BLOCK.set(true); @@ -71,9 +72,10 @@ async fn step() -> Result<()> { loop { let message = wait_for_message().await; - if &message.as_bytes()[0..1] == b"&" - && &message.as_bytes()[2..6] == b"[<] " - && message.contains(": &f!CEF!") + if message.len() >= 6 + && (&message.as_bytes()[0..1] == b"&" + && &message.as_bytes()[2..6] == b"[<] " + && message.contains(": &f!CEF!")) { SHOULD_BLOCK.set(true); diff --git a/src/chat/hidden_communication/whispers/outgoing.rs b/src/chat/hidden_communication/whispers/outgoing.rs index feb7a4f..f7bae53 100644 --- a/src/chat/hidden_communication/whispers/outgoing.rs +++ b/src/chat/hidden_communication/whispers/outgoing.rs @@ -18,9 +18,10 @@ pub async fn query_whisper(real_name: &str) -> Result<()> { loop { let message = wait_for_message().await; - if &message.as_bytes()[0..1] == b"&" - && &message.as_bytes()[2..6] == b"[<] " - && message.ends_with(": &f?CEF?") + if message.len() >= 6 + && (&message.as_bytes()[0..1] == b"&" + && &message.as_bytes()[2..6] == b"[<] " + && message.ends_with(": &f?CEF?")) { SHOULD_BLOCK.set(true); break; @@ -34,9 +35,10 @@ pub async fn query_whisper(real_name: &str) -> Result<()> { let full_message_encoded = timeout(Duration::from_secs(5), async { loop { let message = wait_for_message().await; - if &message.as_bytes()[0..1] == b"&" - && &message.as_bytes()[2..6] == b"[>] " - && message.contains(": &f!CEF!") + if message.len() >= 6 + && (&message.as_bytes()[0..1] == b"&" + && &message.as_bytes()[2..6] == b"[>] " + && message.contains(": &f!CEF!")) { SHOULD_BLOCK.set(true); debug!("got whisper response {:?}", message);