Ticket #815: process_815_3.py

File process_815_3.py, 3.6 KB (added by therve, 15 years ago)
Line 
1Index: twisted/test/test_process.py
2===================================================================
3--- twisted/test/test_process.py        (revision 18572)
4+++ twisted/test/test_process.py        (working copy)
5@@ -289,7 +289,7 @@
6         return d.addCallback(processEnded)
7 
8 
9-    def test_wrongArguments(self):
10+    def testWrongArguments(self):
11         """
12         Test invalid arguments to spawnProcess: arguments and environment
13         must only contains string or unicode, and not null bytes.
14Index: twisted/internet/posixbase.py
15===================================================================
16--- twisted/internet/posixbase.py       (revision 18572)
17+++ twisted/internet/posixbase.py       (working copy)
18@@ -268,9 +268,31 @@
19 
20     # IReactorProcess
21 
22+    def _checkProcessArgs(self, args, env):
23+        """
24+        Check for valid arguments and environment to spawnProcess.
25+        """
26+        # Common check function
27+        def argChecker(arg):
28+            return isinstance(arg, (str, unicode)) and '\0' not in arg
29+
30+        # Make a few tests to check input validity
31+        if not isinstance(args, (tuple, list)):
32+            raise TypeError("Arguments must be a tuple or list")
33+        for arg in args:
34+            if not argChecker(arg):
35+               raise TypeError("Arguments contain a non-string value")
36+        if env is not None:
37+            for key, val in env.iteritems():
38+                if not argChecker(key):
39+                    raise TypeError("Environment contains a non-string key")
40+                if not argChecker(val):
41+                    raise TypeError("Environment contains a non-string value")
42+
43     def spawnProcess(self, processProtocol, executable, args=(),
44                      env={}, path=None,
45                      uid=None, gid=None, usePTY=0, childFDs=None):
46+        self._checkProcessArgs(args, env)
47         if platformType == 'posix':
48             if usePTY:
49                 if childFDs is not None:
50Index: twisted/internet/win32eventreactor.py
51===================================================================
52--- twisted/internet/win32eventreactor.py       (revision 18572)
53+++ twisted/internet/win32eventreactor.py       (working copy)
54@@ -210,6 +210,7 @@
55             raise ValueError(
56                 "Custom child file descriptor mappings are unsupported on "
57                 "this platform.")
58+        self._checkProcessArgs(args, env)
59         return Process(self, processProtocol, executable, args, env, path)
60 
61 
62Index: twisted/internet/process.py
63===================================================================
64--- twisted/internet/process.py (revision 18572)
65+++ twisted/internet/process.py (working copy)
66@@ -266,23 +266,6 @@
67         nuances of setXXuid on UNIX: it will assume that either your effective
68         or real UID is 0.)
69         """
70-        # Common check function
71-        def argChecker(arg):
72-            return isinstance(arg, (str, unicode)) and '\0' not in arg
73-
74-        # Make a few tests to check input validity
75-        if not isinstance(args, (tuple, list)):
76-            raise TypeError("Arguments must be a tuple or list")
77-        for arg in args:
78-            if not argChecker(arg):
79-               raise TypeError("Arguments contain a non-string value")
80-        if environment is not None:
81-            for key, val in environment.iteritems():
82-                if not argChecker(key):
83-                    raise TypeError("Environment contains a non-string key")
84-                if not argChecker(val):
85-                    raise TypeError("Environment contains a non-string value")
86-
87         if not proto:
88             assert 'r' not in childFDs.values()
89             assert 'w' not in childFDs.values()