From 0da43e164350f555227c4ff89417f733b8217875 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=CE=A3rebe=20-=20Romain=20GERARD?= <erebe@erebe.eu>
Date: Fri, 7 Jun 2024 20:53:08 +0200
Subject: [PATCH] fix(#289): crash due to invalid UDP socks5 packet received

---
 src/socks5_udp.rs | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/socks5_udp.rs b/src/socks5_udp.rs
index 3bdb054..c3d98e3 100644
--- a/src/socks5_udp.rs
+++ b/src/socks5_udp.rs
@@ -241,7 +241,14 @@ pub async fn run_server(
 
             let (destination_addr, data) = {
                 let payload = buf.split().freeze();
-                let (frag, destination_addr, data) = fast_socks5::parse_udp_request(payload.chunk()).await.unwrap();
+                let (frag, destination_addr, data) = match fast_socks5::parse_udp_request(payload.chunk()).await {
+                    Ok((frag, addr, data)) => (frag, addr, data),
+                    Err(err) => {
+                        warn!("Skipping invalid UDP socks5 request: {} ", err);
+                        debug!("Invalid UDP socks5 request: {:?}", payload.chunk());
+                        continue;
+                    }
+                };
                 // We don't support udp fragmentation
                 if frag != 0 {
                     warn!("dropping UDP socks5 fragmented");