Skip to content

Commit 0cea36f

Browse files
authored
net: fix handling of leading zero byte in from_abstract_name (#6838)
1 parent d621359 commit 0cea36f

File tree

3 files changed

+13
-3
lines changed

3 files changed

+13
-3
lines changed

tokio/src/net/unix/listener.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ impl UnixListener {
8181
let addr = {
8282
let os_str_bytes = path.as_ref().as_os_str().as_bytes();
8383
if os_str_bytes.starts_with(b"\0") {
84-
StdSocketAddr::from_abstract_name(os_str_bytes)?
84+
StdSocketAddr::from_abstract_name(&os_str_bytes[1..])?
8585
} else {
8686
StdSocketAddr::from_pathname(path)?
8787
}

tokio/src/net/unix/stream.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ impl UnixStream {
7777
let addr = {
7878
let os_str_bytes = path.as_ref().as_os_str().as_bytes();
7979
if os_str_bytes.starts_with(b"\0") {
80-
StdSocketAddr::from_abstract_name(os_str_bytes)?
80+
StdSocketAddr::from_abstract_name(&os_str_bytes[1..])?
8181
} else {
8282
StdSocketAddr::from_pathname(path)?
8383
}

tokio/tests/uds_stream.rs

+11-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
#![cfg(unix)]
44

55
use std::io;
6+
#[cfg(target_os = "android")]
7+
use std::os::android::net::SocketAddrExt;
8+
#[cfg(target_os = "linux")]
9+
use std::os::linux::net::SocketAddrExt;
610
use std::task::Poll;
711

812
use tokio::io::{AsyncReadExt, AsyncWriteExt, Interest};
@@ -431,5 +435,11 @@ async fn abstract_socket_name() {
431435
let accept = listener.accept();
432436
let connect = UnixStream::connect(&socket_path);
433437

434-
try_join(accept, connect).await.unwrap();
438+
let ((stream, _), _) = try_join(accept, connect).await.unwrap();
439+
440+
let local_addr = stream.into_std().unwrap().local_addr().unwrap();
441+
let abstract_path_name = local_addr.as_abstract_name().unwrap();
442+
443+
// `as_abstract_name` removes leading zero bytes
444+
assert_eq!(abstract_path_name, b"aaa");
435445
}

0 commit comments

Comments
 (0)