# Buggy code
def passenv(testenv_config, value):
    # Flatten the list to deal with space-separated values.
    value = list(itertools.chain.from_iterable([x.split(" ") for x in value]))

    passenv = {
        "PATH",
        "PIP_INDEX_URL",
        "LANG",
        "LANGUAGE",
        "LD_LIBRARY_PATH",
        "TOX_WORK_DIR",
        str(REPORTER_TIMESTAMP_ON_ENV),
        str(PARALLEL_ENV_VAR_KEY),
    }

    # read in global passenv settings
    p = os.environ.get("TOX_TESTENV_PASSENV", None)
    if p is not None:
        env_values = [x for x in p.split() if x]
        value.extend(env_values)

    # we ensure that tmp directory settings are passed on
    # we could also set it to the per-venv "envtmpdir"
    # but this leads to very long paths when run with jenkins
    # so we just pass it on by default for now.
    if tox.INFO.IS_WIN:
        passenv.add("SYSTEMDRIVE")  # needed for pip6
        passenv.add("SYSTEMROOT")  # needed for python's crypto module
        passenv.add("PATHEXT")  # needed for discovering executables
        passenv.add("COMSPEC")  # needed for distutils cygwincompiler
        passenv.add("TEMP")
        passenv.add("TMP")
        # for `multiprocessing.cpu_count()` on Windows (prior to Python 3.4).
        passenv.add("NUMBER_OF_PROCESSORS")
        passenv.add("PROCESSOR_ARCHITECTURE")  # platform.machine()
        passenv.add("USERPROFILE")  # needed for `os.path.expanduser()`
        passenv.add("MSYSTEM")  # fixes #429
    else:
        passenv.add("TMPDIR")
    for spec in value:
        for name in os.environ:
            if fnmatchcase(name.upper(), spec.upper()):
                passenv.add(name)
    return passenv


# Traceback (AssertionError)
$ tox -p all
⠸ [3] py36 | py37 | py38ERROR: invocation failed (exit code 1), logfile: /home/churchyard/tmp/totox/.tox/py37/log/py37-5.log
=================================================== log start ===================================================
py37 run-test-pre: PYTHONHASHSEED='1114882869'
py37 run-test: commands[0] | python runner.py
py37 run-test-pre: PYTHONHASHSEED='3136963143'
py37 run-test: commands[0] | python -c 'import sys; print(sys.version)'
3.7.5 (default, Oct 17 2019, 12:09:47)
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)]
Traceback (most recent call last):
File "runner.py", line 8, in <module>
assert 'py36' in cp.stdout
AssertionError
ERROR: InvocationError for command /home/churchyard/tmp/totox/.tox/py37/bin/python runner.py (exited with code 1)

==================================================== log end ====================================================
✖ FAIL py37 in 1.389 seconds
⠴ [2] py36 | py38ERROR: invocation failed (exit code 1), logfile: /home/churchyard/tmp/totox/.tox/py38/log/py38-5.log
=================================================== log start ===================================================
py38 run-test-pre: PYTHONHASHSEED='3502501543'
py38 run-test: commands[0] | python runner.py
py38 run-test-pre: PYTHONHASHSEED='1953872060'
py38 run-test: commands[0] | python -c 'import sys; print(sys.version)'
3.8.0 (default, Oct 16 2019, 12:47:36)
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)]
Traceback (most recent call last):
File "runner.py", line 8, in <module>
assert 'py36' in cp.stdout
AssertionError
ERROR: InvocationError for command /home/churchyard/tmp/totox/.tox/py38/bin/python runner.py (exited with code 1)

==================================================== log end ====================================================
✖ FAIL py38 in 1.536 seconds
⠇ [1] py36ERROR: invocation failed (exit code 1), logfile: /home/churchyard/tmp/totox/.tox/py36/log/py36-5.log
=================================================== log start ===================================================
py36 run-test-pre: PYTHONHASHSEED='664963699'
py36 run-test: commands[0] | python runner.py
py36 recreate: /home/churchyard/tmp/totox/inner/.tox/py36
py36 run-test-pre: PYTHONHASHSEED='4138548204'
py36 run-test: commands[0] | python -c 'import sys; print(sys.version)'
3.6.9 (default, Jul  3 2019, 15:08:07)
[GCC 9.1.1 20190503 (Red Hat 9.1.1-1)]
Traceback (most recent call last):
File "runner.py", line 9, in <module>
assert 'py37' in cp.stdout
AssertionError
ERROR: InvocationError for command /home/churchyard/tmp/totox/.tox/py36/bin/python runner.py (exited with code 1)

==================================================== log end ====================================================
✖ FAIL py36 in 4.851 seconds
____________________________________________________ summary ____________________________________________________
ERROR:   py36: parallel child exit code 1
ERROR:   py37: parallel child exit code 1
ERROR:   py38: parallel child exit code 1

# Fixed code
def passenv(testenv_config, value):
    # Flatten the list to deal with space-separated values.
    value = list(itertools.chain.from_iterable([x.split(" ") for x in value]))

    passenv = {
        "PATH",
        "PIP_INDEX_URL",
        "LANG",
        "LANGUAGE",
        "LD_LIBRARY_PATH",
        "TOX_WORK_DIR",
        str(REPORTER_TIMESTAMP_ON_ENV),
        str(PARALLEL_ENV_VAR_KEY_PUBLIC),
    }

    # read in global passenv settings
    p = os.environ.get("TOX_TESTENV_PASSENV", None)
    if p is not None:
        env_values = [x for x in p.split() if x]
        value.extend(env_values)

    # we ensure that tmp directory settings are passed on
    # we could also set it to the per-venv "envtmpdir"
    # but this leads to very long paths when run with jenkins
    # so we just pass it on by default for now.
    if tox.INFO.IS_WIN:
        passenv.add("SYSTEMDRIVE")  # needed for pip6
        passenv.add("SYSTEMROOT")  # needed for python's crypto module
        passenv.add("PATHEXT")  # needed for discovering executables
        passenv.add("COMSPEC")  # needed for distutils cygwincompiler
        passenv.add("TEMP")
        passenv.add("TMP")
        # for `multiprocessing.cpu_count()` on Windows (prior to Python 3.4).
        passenv.add("NUMBER_OF_PROCESSORS")
        passenv.add("PROCESSOR_ARCHITECTURE")  # platform.machine()
        passenv.add("USERPROFILE")  # needed for `os.path.expanduser()`
        passenv.add("MSYSTEM")  # fixes #429
    else:
        passenv.add("TMPDIR")
    for spec in value:
        for name in os.environ:
            if fnmatchcase(name.upper(), spec.upper()):
                passenv.add(name)
    return passenv