@@ -913,6 +913,29 @@ def requireSocket(*args):
913913
914914class GeneralModuleTests (unittest .TestCase ):
915915
916+ @unittest .skipUnless (hasattr (socket .socket , "sendmsg" ),"sendmsg not supported" )
917+ def test_sendmsg_reentrant_ancillary_mutation (self ):
918+
919+ class Mut :
920+ def __index__ (self ):
921+ seq .clear ()
922+ return 0
923+
924+ seq = [
925+ (socket .SOL_SOCKET , Mut (), b'x' ),
926+ (socket .SOL_SOCKET , 0 , b'x' ),
927+ ]
928+
929+ left , right = socket .socketpair ()
930+ self .addCleanup (left .close )
931+ self .addCleanup (right .close )
932+ self .assertRaises (
933+ (TypeError , OSError ),
934+ left .sendmsg ,
935+ [b'x' ],
936+ seq ,
937+ )
938+
916939 @unittest .skipUnless (_socket is not None , 'need _socket module' )
917940 def test_socket_type (self ):
918941 self .assertTrue (gc .is_tracked (_socket .socket ))
@@ -7491,32 +7514,6 @@ def detach():
74917514 pass
74927515
74937516
7494- class SendmsgReentrancyTests (unittest .TestCase ):
7495-
7496- @unittest .skipUnless (hasattr (socket .socket , "sendmsg" ),
7497- "sendmsg not supported" )
7498- def test_sendmsg_reentrant_ancillary_mutation (self ):
7499-
7500- class Mut :
7501- def __index__ (self ):
7502- seq .clear ()
7503- return 0
7504-
7505- seq = [
7506- (socket .SOL_SOCKET , Mut (), b'x' ),
7507- (socket .SOL_SOCKET , 0 , b'x' ),
7508- ]
7509-
7510- left , right = socket .socketpair ()
7511- self .addCleanup (left .close )
7512- self .addCleanup (right .close )
7513- self .assertRaises (
7514- (TypeError , OSError ),
7515- left .sendmsg ,
7516- [b'x' ],
7517- seq ,
7518- )
7519-
75207517def setUpModule ():
75217518 thread_info = threading_helper .threading_setup ()
75227519 unittest .addModuleCleanup (threading_helper .threading_cleanup , * thread_info )
0 commit comments