Skip to content

Commit

Permalink
create_subprocess_exec should treat env={} as empty environment (#439) (
Browse files Browse the repository at this point in the history
#454)

* Empty env dict represents empty environment.
* Allow 0-length cstring array

Co-authored-by: Fantix King <[email protected]>
  • Loading branch information
byllyfish and fantix authored Aug 31, 2022
1 parent e7934c8 commit e04637e
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 4 deletions.
16 changes: 16 additions & 0 deletions tests/test_process.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,22 @@ async def test():

self.loop.run_until_complete(test())

def test_process_env_2(self):
async def test():
cmd = 'env'
env = {} # empty environment
proc = await asyncio.create_subprocess_exec(
cmd,
env=env,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)

out, _ = await proc.communicate()
self.assertEqual(out, b'')
self.assertEqual(proc.returncode, 0)

self.loop.run_until_complete(test())

def test_process_cwd_1(self):
async def test():
cmd = 'pwd'
Expand Down
5 changes: 1 addition & 4 deletions uvloop/handles/process.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -217,9 +217,6 @@ cdef class UVProcess(UVHandle):

char **ret

if UVLOOP_DEBUG:
assert arr_len > 0

ret = <char **>PyMem_RawMalloc((arr_len + 1) * sizeof(char *))
if ret is NULL:
raise MemoryError()
Expand Down Expand Up @@ -285,7 +282,7 @@ cdef class UVProcess(UVHandle):
self.uv_opt_args = self.__to_cstring_array(self.__args)

cdef _init_env(self, dict env):
if env is not None and len(env):
if env is not None:
self.__env = list()
for key in env:
val = env[key]
Expand Down

0 comments on commit e04637e

Please sign in to comment.