Skip to content

Commit 96fa5a8

Browse files
committed
Add test coverage for bug with unset socket address length
1 parent 905c23e commit 96fa5a8

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

test/sys/test_socket.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,50 @@ pub fn test_socketpair() {
202202
assert_eq!(&buf[..], b"hello");
203203
}
204204

205+
#[test]
206+
pub fn test_recvmsg_sockaddr_un() {
207+
use nix::sys::socket::{
208+
self, bind, socket, AddressFamily, MsgFlags, SockFlag, SockType,
209+
};
210+
211+
let tempdir = tempfile::tempdir().unwrap();
212+
let sockname = tempdir.path().join("sock");
213+
let sock = socket(
214+
AddressFamily::Unix,
215+
SockType::Datagram,
216+
SockFlag::empty(),
217+
None,
218+
)
219+
.expect("socket failed");
220+
let sockaddr = UnixAddr::new(&sockname).unwrap();
221+
bind(sock, &sockaddr).expect("bind failed");
222+
223+
// Send a message
224+
let send_buffer = "hello".as_bytes();
225+
if let Err(e) = socket::sendmsg(
226+
sock,
227+
&[std::io::IoSlice::new(send_buffer)],
228+
&[],
229+
MsgFlags::empty(),
230+
Some(&sockaddr),
231+
) {
232+
print!("Couldn't send ({e:?}), so skipping test");
233+
return;
234+
}
235+
236+
// Receive the message
237+
let mut recv_buffer = [0u8; 32];
238+
let received = socket::recvmsg(
239+
sock,
240+
&mut [std::io::IoSliceMut::new(&mut recv_buffer)],
241+
None,
242+
MsgFlags::empty(),
243+
)
244+
.unwrap();
245+
// Check the address in the received message
246+
assert_eq!(sockaddr, received.address.unwrap());
247+
}
248+
205249
#[test]
206250
pub fn test_std_conversions() {
207251
use nix::sys::socket::*;

0 commit comments

Comments
 (0)