net: fix handling of leading zero byte in from_abstract_name (#6838)

This commit is contained in:
Motoyuki Kimura 2024-09-12 03:15:12 +09:00 committed by GitHub
parent d6213594ca
commit 0cea36fa3d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 13 additions and 3 deletions

View File

@ -81,7 +81,7 @@ impl UnixListener {
let addr = {
let os_str_bytes = path.as_ref().as_os_str().as_bytes();
if os_str_bytes.starts_with(b"\0") {
StdSocketAddr::from_abstract_name(os_str_bytes)?
StdSocketAddr::from_abstract_name(&os_str_bytes[1..])?
} else {
StdSocketAddr::from_pathname(path)?
}

View File

@ -77,7 +77,7 @@ impl UnixStream {
let addr = {
let os_str_bytes = path.as_ref().as_os_str().as_bytes();
if os_str_bytes.starts_with(b"\0") {
StdSocketAddr::from_abstract_name(os_str_bytes)?
StdSocketAddr::from_abstract_name(&os_str_bytes[1..])?
} else {
StdSocketAddr::from_pathname(path)?
}

View File

@ -3,6 +3,10 @@
#![cfg(unix)]
use std::io;
#[cfg(target_os = "android")]
use std::os::android::net::SocketAddrExt;
#[cfg(target_os = "linux")]
use std::os::linux::net::SocketAddrExt;
use std::task::Poll;
use tokio::io::{AsyncReadExt, AsyncWriteExt, Interest};
@ -431,5 +435,11 @@ async fn abstract_socket_name() {
let accept = listener.accept();
let connect = UnixStream::connect(&socket_path);
try_join(accept, connect).await.unwrap();
let ((stream, _), _) = try_join(accept, connect).await.unwrap();
let local_addr = stream.into_std().unwrap().local_addr().unwrap();
let abstract_path_name = local_addr.as_abstract_name().unwrap();
// `as_abstract_name` removes leading zero bytes
assert_eq!(abstract_path_name, b"aaa");
}