@@ -4,6 +4,7 @@ use libc::c_char;
4
4
use nix:: sys:: socket:: { getsockname, AddressFamily , UnixAddr } ;
5
5
use std:: collections:: hash_map:: DefaultHasher ;
6
6
use std:: hash:: { Hash , Hasher } ;
7
+ use std:: io;
7
8
use std:: net:: { SocketAddrV4 , SocketAddrV6 } ;
8
9
use std:: os:: unix:: io:: { AsRawFd , RawFd } ;
9
10
use std:: path:: Path ;
@@ -55,7 +56,7 @@ pub fn test_timestamping() {
55
56
. unwrap ( ) ;
56
57
57
58
let mut ts = None ;
58
- for c in recv. cmsgs ( ) {
59
+ for c in recv. cmsgs ( ) . unwrap ( ) {
59
60
if let ControlMessageOwned :: ScmTimestampsns ( timestamps) = c {
60
61
ts = Some ( timestamps. system ) ;
61
62
}
@@ -117,7 +118,7 @@ pub fn test_timestamping_realtime() {
117
118
. unwrap ( ) ;
118
119
119
120
let mut ts = None ;
120
- for c in recv. cmsgs ( ) {
121
+ for c in recv. cmsgs ( ) . unwrap ( ) {
121
122
if let ControlMessageOwned :: ScmRealtime ( timeval) = c {
122
123
ts = Some ( timeval) ;
123
124
}
@@ -179,7 +180,7 @@ pub fn test_timestamping_monotonic() {
179
180
. unwrap ( ) ;
180
181
181
182
let mut ts = None ;
182
- for c in recv. cmsgs ( ) {
183
+ for c in recv. cmsgs ( ) . unwrap ( ) {
183
184
if let ControlMessageOwned :: ScmMonotonic ( timeval) = c {
184
185
ts = Some ( timeval) ;
185
186
}
@@ -889,7 +890,7 @@ pub fn test_scm_rights() {
889
890
)
890
891
. unwrap ( ) ;
891
892
892
- for cmsg in msg. cmsgs ( ) {
893
+ for cmsg in msg. cmsgs ( ) . unwrap ( ) {
893
894
if let ControlMessageOwned :: ScmRights ( fd) = cmsg {
894
895
assert_eq ! ( received_r, None ) ;
895
896
assert_eq ! ( fd. len( ) , 1 ) ;
@@ -1330,7 +1331,7 @@ fn test_scm_rights_single_cmsg_multiple_fds() {
1330
1331
. flags
1331
1332
. intersects( MsgFlags :: MSG_TRUNC | MsgFlags :: MSG_CTRUNC ) ) ;
1332
1333
1333
- let mut cmsgs = msg. cmsgs ( ) ;
1334
+ let mut cmsgs = msg. cmsgs ( ) . unwrap ( ) ;
1334
1335
match cmsgs. next ( ) {
1335
1336
Some ( ControlMessageOwned :: ScmRights ( fds) ) => {
1336
1337
assert_eq ! (
@@ -1399,7 +1400,7 @@ pub fn test_sendmsg_empty_cmsgs() {
1399
1400
)
1400
1401
. unwrap ( ) ;
1401
1402
1402
- if msg. cmsgs ( ) . next ( ) . is_some ( ) {
1403
+ if msg. cmsgs ( ) . unwrap ( ) . next ( ) . is_some ( ) {
1403
1404
panic ! ( "unexpected cmsg" ) ;
1404
1405
}
1405
1406
assert ! ( !msg
@@ -1466,7 +1467,7 @@ fn test_scm_credentials() {
1466
1467
. unwrap ( ) ;
1467
1468
let mut received_cred = None ;
1468
1469
1469
- for cmsg in msg. cmsgs ( ) {
1470
+ for cmsg in msg. cmsgs ( ) . unwrap ( ) {
1470
1471
let cred = match cmsg {
1471
1472
#[ cfg( linux_android) ]
1472
1473
ControlMessageOwned :: ScmCredentials ( cred) => cred,
@@ -1497,7 +1498,7 @@ fn test_scm_credentials() {
1497
1498
#[ test]
1498
1499
fn test_scm_credentials_and_rights ( ) {
1499
1500
let space = cmsg_space ! ( libc:: ucred, RawFd ) ;
1500
- test_impl_scm_credentials_and_rights ( space) ;
1501
+ test_impl_scm_credentials_and_rights ( space) . unwrap ( ) ;
1501
1502
}
1502
1503
1503
1504
/// Ensure that passing a an oversized control message buffer to recvmsg
@@ -1509,11 +1510,20 @@ fn test_scm_credentials_and_rights() {
1509
1510
#[ test]
1510
1511
fn test_too_large_cmsgspace ( ) {
1511
1512
let space = vec ! [ 0u8 ; 1024 ] ;
1512
- test_impl_scm_credentials_and_rights ( space) ;
1513
+ test_impl_scm_credentials_and_rights ( space) . unwrap ( ) ;
1513
1514
}
1514
1515
1515
1516
#[ cfg( linux_android) ]
1516
- fn test_impl_scm_credentials_and_rights ( mut space : Vec < u8 > ) {
1517
+ #[ test]
1518
+ fn test_too_small_cmsgspace ( ) {
1519
+ let space = vec ! [ 0u8 ; 4 ] ;
1520
+ assert ! ( test_impl_scm_credentials_and_rights( space) . is_err( ) ) ;
1521
+ }
1522
+
1523
+ #[ cfg( linux_android) ]
1524
+ fn test_impl_scm_credentials_and_rights (
1525
+ mut space : Vec < u8 > ,
1526
+ ) -> Result < ( ) , io:: Error > {
1517
1527
use libc:: ucred;
1518
1528
use nix:: sys:: socket:: sockopt:: PassCred ;
1519
1529
use nix:: sys:: socket:: {
@@ -1573,9 +1583,9 @@ fn test_impl_scm_credentials_and_rights(mut space: Vec<u8>) {
1573
1583
. unwrap ( ) ;
1574
1584
let mut received_cred = None ;
1575
1585
1576
- assert_eq ! ( msg. cmsgs( ) . count( ) , 2 , "expected 2 cmsgs" ) ;
1586
+ assert_eq ! ( msg. cmsgs( ) ? . count( ) , 2 , "expected 2 cmsgs" ) ;
1577
1587
1578
- for cmsg in msg. cmsgs ( ) {
1588
+ for cmsg in msg. cmsgs ( ) ? {
1579
1589
match cmsg {
1580
1590
ControlMessageOwned :: ScmRights ( fds) => {
1581
1591
assert_eq ! ( received_r, None , "already received fd" ) ;
@@ -1606,6 +1616,8 @@ fn test_impl_scm_credentials_and_rights(mut space: Vec<u8>) {
1606
1616
read ( received_r. as_raw_fd ( ) , & mut buf) . unwrap ( ) ;
1607
1617
assert_eq ! ( & buf[ ..] , b"world" ) ;
1608
1618
close ( received_r) . unwrap ( ) ;
1619
+
1620
+ Ok ( ( ) )
1609
1621
}
1610
1622
1611
1623
// Test creating and using named unix domain sockets
@@ -1742,7 +1754,6 @@ fn loopback_address(
1742
1754
use nix:: ifaddrs:: getifaddrs;
1743
1755
use nix:: net:: if_:: * ;
1744
1756
use nix:: sys:: socket:: SockaddrLike ;
1745
- use std:: io;
1746
1757
use std:: io:: Write ;
1747
1758
1748
1759
let mut addrs = match getifaddrs ( ) {
@@ -1837,7 +1848,7 @@ pub fn test_recv_ipv4pktinfo() {
1837
1848
. flags
1838
1849
. intersects( MsgFlags :: MSG_TRUNC | MsgFlags :: MSG_CTRUNC ) ) ;
1839
1850
1840
- let mut cmsgs = msg. cmsgs ( ) ;
1851
+ let mut cmsgs = msg. cmsgs ( ) . unwrap ( ) ;
1841
1852
if let Some ( ControlMessageOwned :: Ipv4PacketInfo ( pktinfo) ) = cmsgs. next ( )
1842
1853
{
1843
1854
let i = if_nametoindex ( lo_name. as_bytes ( ) ) . expect ( "if_nametoindex" ) ;
@@ -1929,11 +1940,11 @@ pub fn test_recvif() {
1929
1940
assert ! ( !msg
1930
1941
. flags
1931
1942
. intersects( MsgFlags :: MSG_TRUNC | MsgFlags :: MSG_CTRUNC ) ) ;
1932
- assert_eq ! ( msg. cmsgs( ) . count( ) , 2 , "expected 2 cmsgs" ) ;
1943
+ assert_eq ! ( msg. cmsgs( ) . unwrap ( ) . count( ) , 2 , "expected 2 cmsgs" ) ;
1933
1944
1934
1945
let mut rx_recvif = false ;
1935
1946
let mut rx_recvdstaddr = false ;
1936
- for cmsg in msg. cmsgs ( ) {
1947
+ for cmsg in msg. cmsgs ( ) . unwrap ( ) {
1937
1948
match cmsg {
1938
1949
ControlMessageOwned :: Ipv4RecvIf ( dl) => {
1939
1950
rx_recvif = true ;
@@ -2027,10 +2038,10 @@ pub fn test_recvif_ipv4() {
2027
2038
assert ! ( !msg
2028
2039
. flags
2029
2040
. intersects( MsgFlags :: MSG_TRUNC | MsgFlags :: MSG_CTRUNC ) ) ;
2030
- assert_eq ! ( msg. cmsgs( ) . count( ) , 1 , "expected 1 cmsgs" ) ;
2041
+ assert_eq ! ( msg. cmsgs( ) . unwrap ( ) . count( ) , 1 , "expected 1 cmsgs" ) ;
2031
2042
2032
2043
let mut rx_recvorigdstaddr = false ;
2033
- for cmsg in msg. cmsgs ( ) {
2044
+ for cmsg in msg. cmsgs ( ) . unwrap ( ) {
2034
2045
match cmsg {
2035
2046
ControlMessageOwned :: Ipv4OrigDstAddr ( addr) => {
2036
2047
rx_recvorigdstaddr = true ;
@@ -2113,10 +2124,10 @@ pub fn test_recvif_ipv6() {
2113
2124
assert ! ( !msg
2114
2125
. flags
2115
2126
. intersects( MsgFlags :: MSG_TRUNC | MsgFlags :: MSG_CTRUNC ) ) ;
2116
- assert_eq ! ( msg. cmsgs( ) . count( ) , 1 , "expected 1 cmsgs" ) ;
2127
+ assert_eq ! ( msg. cmsgs( ) . unwrap ( ) . count( ) , 1 , "expected 1 cmsgs" ) ;
2117
2128
2118
2129
let mut rx_recvorigdstaddr = false ;
2119
- for cmsg in msg. cmsgs ( ) {
2130
+ for cmsg in msg. cmsgs ( ) . unwrap ( ) {
2120
2131
match cmsg {
2121
2132
ControlMessageOwned :: Ipv6OrigDstAddr ( addr) => {
2122
2133
rx_recvorigdstaddr = true ;
@@ -2214,7 +2225,7 @@ pub fn test_recv_ipv6pktinfo() {
2214
2225
. flags
2215
2226
. intersects( MsgFlags :: MSG_TRUNC | MsgFlags :: MSG_CTRUNC ) ) ;
2216
2227
2217
- let mut cmsgs = msg. cmsgs ( ) ;
2228
+ let mut cmsgs = msg. cmsgs ( ) . unwrap ( ) ;
2218
2229
if let Some ( ControlMessageOwned :: Ipv6PacketInfo ( pktinfo) ) = cmsgs. next ( )
2219
2230
{
2220
2231
let i = if_nametoindex ( lo_name. as_bytes ( ) ) . expect ( "if_nametoindex" ) ;
@@ -2357,7 +2368,7 @@ fn test_recvmsg_timestampns() {
2357
2368
flags,
2358
2369
)
2359
2370
. unwrap ( ) ;
2360
- let rtime = match r. cmsgs ( ) . next ( ) {
2371
+ let rtime = match r. cmsgs ( ) . unwrap ( ) . next ( ) {
2361
2372
Some ( ControlMessageOwned :: ScmTimestampns ( rtime) ) => rtime,
2362
2373
Some ( _) => panic ! ( "Unexpected control message" ) ,
2363
2374
None => panic ! ( "No control message" ) ,
@@ -2418,7 +2429,7 @@ fn test_recvmmsg_timestampns() {
2418
2429
)
2419
2430
. unwrap ( )
2420
2431
. collect ( ) ;
2421
- let rtime = match r[ 0 ] . cmsgs ( ) . next ( ) {
2432
+ let rtime = match r[ 0 ] . cmsgs ( ) . unwrap ( ) . next ( ) {
2422
2433
Some ( ControlMessageOwned :: ScmTimestampns ( rtime) ) => rtime,
2423
2434
Some ( _) => panic ! ( "Unexpected control message" ) ,
2424
2435
None => panic ! ( "No control message" ) ,
@@ -2508,7 +2519,7 @@ fn test_recvmsg_rxq_ovfl() {
2508
2519
MsgFlags :: MSG_DONTWAIT ,
2509
2520
) {
2510
2521
Ok ( r) => {
2511
- drop_counter = match r. cmsgs ( ) . next ( ) {
2522
+ drop_counter = match r. cmsgs ( ) . unwrap ( ) . next ( ) {
2512
2523
Some ( ControlMessageOwned :: RxqOvfl ( drop_counter) ) => {
2513
2524
drop_counter
2514
2525
}
@@ -2687,7 +2698,7 @@ mod linux_errqueue {
2687
2698
assert_eq ! ( msg. address, Some ( sock_addr) ) ;
2688
2699
2689
2700
// Check for expected control message.
2690
- let ext_err = match msg. cmsgs ( ) . next ( ) {
2701
+ let ext_err = match msg. cmsgs ( ) . unwrap ( ) . next ( ) {
2691
2702
Some ( cmsg) => testf ( & cmsg) ,
2692
2703
None => panic ! ( "No control message" ) ,
2693
2704
} ;
@@ -2878,7 +2889,7 @@ fn test_recvmm2() -> nix::Result<()> {
2878
2889
#[ cfg( not( any( qemu, target_arch = "aarch64" ) ) ) ]
2879
2890
let mut saw_time = false ;
2880
2891
let mut recvd = 0 ;
2881
- for cmsg in rmsg. cmsgs ( ) {
2892
+ for cmsg in rmsg. cmsgs ( ) . unwrap ( ) {
2882
2893
if let ControlMessageOwned :: ScmTimestampsns ( timestamps) = cmsg {
2883
2894
let ts = timestamps. system ;
2884
2895
0 commit comments