From 06429ccc4c977cd796f7a49492cee8548bba09b2 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 21 May 2020 14:59:22 -0600 Subject: [PATCH] Fix redox socket inner_get_name --- src/platform/redox/socket.rs | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/platform/redox/socket.rs b/src/platform/redox/socket.rs index fd875c7635..5937bdfb3d 100644 --- a/src/platform/redox/socket.rs +++ b/src/platform/redox/socket.rs @@ -132,23 +132,19 @@ unsafe fn inner_get_name( address: *mut sockaddr, address_len: *mut socklen_t, ) -> Result { - // 32 should probably be large enough. // Format: [udp|tcp:]remote/local, chan:path - let mut buf = [0; 32]; + let mut buf = [0; 256]; let len = syscall::fpath(socket as usize, &mut buf)?; let buf = &buf[..len]; - assert!(&buf[..4] == b"tcp:" || &buf[..4] == b"udp:" || &buf[..5] == b"chan:"); - match &buf[..5] { - b"tcp:" | b"udp:" => { - inner_af_inet(local, &buf[4..], address, address_len); - } - b"chan:" => { - inner_af_unix(&buf[5..], address, address_len); - } + if buf.starts_with(b"tcp:") || buf.starts_with(b"udp:") { + inner_af_inet(local, &buf[4..], address, address_len); + } else if buf.starts_with(b"chan:") { + inner_af_unix(&buf[5..], address, address_len); + } else { // Socket doesn't belong to any scheme - _ => panic!("socket doesn't match either tcp, udp or chan schemes"), - }; + panic!("socket {:?} doesn't match either tcp, udp or chan schemes", str::from_utf8(buf)); + } Ok(0) }