fix some panic

This commit is contained in:
ssrlive 2024-10-26 01:56:36 +08:00
parent d4afc8f655
commit 669f8426b3
2 changed files with 12 additions and 4 deletions

View file

@ -124,7 +124,7 @@ async fn process_client_udp_req(args: &UdpGwArgs, tx: Sender<Packet>, mut client
}
Err(e) => {
if client.last_activity.elapsed() >= CLIENT_DISCONNECT_TIMEOUT {
log::debug!("client {} last_activity elapsed {e}", client.addr);
log::debug!("client {} last_activity elapsed \"{e}\"", client.addr);
break;
}
continue;

View file

@ -159,7 +159,11 @@ impl StreamOperation for Packet {
} else {
None
};
let mut data = vec![0; length - header.len() - address.as_ref().map_or(0, |addr| addr.len())];
let read_len = header.len() + address.as_ref().map_or(0, |addr| addr.len());
if length < read_len {
return Err(std::io::ErrorKind::InvalidData.into());
}
let mut data = vec![0; length - read_len];
stream.read_exact(&mut data)?;
Ok(Packet::new(header, address, &data))
}
@ -186,7 +190,7 @@ impl AsyncStreamOperation for Packet {
R: tokio::io::AsyncRead + Unpin + Send,
Self: Sized,
{
let mut buf = [0; 2];
let mut buf = [0; UDPGW_LENGTH_FIELD_SIZE];
r.read_exact(&mut buf).await?;
let length = u16::from_be_bytes(buf) as usize;
let header = UdpgwHeader::retrieve_from_async_stream(r).await?;
@ -195,7 +199,11 @@ impl AsyncStreamOperation for Packet {
} else {
None
};
let mut data = vec![0; length - header.len() - address.as_ref().map_or(0, |addr| addr.len())];
let read_len = header.len() + address.as_ref().map_or(0, |addr| addr.len());
if length < read_len {
return Err(std::io::ErrorKind::InvalidData.into());
}
let mut data = vec![0; length - read_len];
r.read_exact(&mut data).await?;
Ok(Packet::new(header, address, &data))
}