@@ -2382,6 +2382,55 @@ def test_spawnve_noargs(self):
23822382 self .assertRaises (ValueError , os .spawnve , os .P_NOWAIT , args [0 ], ('' ,), {})
23832383 self .assertRaises (ValueError , os .spawnve , os .P_NOWAIT , args [0 ], ['' ], {})
23842384
2385+ @requires_os_func ('spawnve' )
2386+ def test_spawnve_invalid_env (self ):
2387+ # null character in the enviroment variable name
2388+ args = [sys .executable , '-c' , 'pass' ]
2389+ newenv = os .environ .copy ()
2390+ newenv ["FRUIT\0 VEGETABLE" ] = "cabbage"
2391+ try :
2392+ exitcode = os .spawnve (os .P_WAIT , args [0 ], args , newenv )
2393+ except ValueError :
2394+ pass
2395+ else :
2396+ self .assertEqual (exitcode , 127 )
2397+
2398+ # null character in the enviroment variable value
2399+ args = [sys .executable , '-c' , 'pass' ]
2400+ newenv = os .environ .copy ()
2401+ newenv ["FRUIT" ] = "orange\0 VEGETABLE=cabbage"
2402+ try :
2403+ exitcode = os .spawnve (os .P_WAIT , args [0 ], args , newenv )
2404+ except ValueError :
2405+ pass
2406+ else :
2407+ self .assertEqual (exitcode , 127 )
2408+
2409+ # equal character in the enviroment variable name
2410+ args = [sys .executable , '-c' , 'pass' ]
2411+ newenv = os .environ .copy ()
2412+ newenv ["FRUIT=ORANGE" ] = "lemon"
2413+ try :
2414+ exitcode = os .spawnve (os .P_WAIT , args [0 ], args , newenv )
2415+ except ValueError :
2416+ pass
2417+ else :
2418+ self .assertEqual (exitcode , 127 )
2419+
2420+ # equal character in the enviroment variable value
2421+ filename = support .TESTFN
2422+ self .addCleanup (support .unlink , filename )
2423+ with open (filename , "w" ) as fp :
2424+ fp .write ('import sys, os\n '
2425+ 'if os.getenv("FRUIT") != "orange=lemon":\n '
2426+ ' raise AssertionError' )
2427+ args = [sys .executable , filename ]
2428+ newenv = os .environ .copy ()
2429+ newenv ["FRUIT" ] = "orange=lemon"
2430+ exitcode = os .spawnve (os .P_WAIT , args [0 ], args , newenv )
2431+ self .assertEqual (exitcode , 0 )
2432+
2433+
23852434# The introduction of this TestCase caused at least two different errors on
23862435# *nix buildbots. Temporarily skip this to let the buildbots move along.
23872436@unittest .skip ("Skip due to platform/environment differences on *NIX buildbots" )
0 commit comments