Skip to content

Commit f4840a0

Browse files
Fail on blanks in passed env vars (#2671)
Co-authored-by: Eric L <[email protected]> Co-authored-by: Bernát Gábor <[email protected]> Resolves #2658
1 parent be3f8a1 commit f4840a0

File tree

3 files changed

+33
-2
lines changed

3 files changed

+33
-2
lines changed

docs/changelog/2658.feature.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fail on :ref:`pass_env`/:ref:`passenv` entries containing whitespace - by :user:`ericzolf`.

src/tox/tox_env/api.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import logging
88
import os
99
import re
10+
import string
1011
import sys
1112
from abc import ABC, abstractmethod
1213
from contextlib import contextmanager
@@ -21,7 +22,7 @@
2122
from tox.execute.request import ExecuteRequest
2223
from tox.journal import EnvJournal
2324
from tox.report import OutErr, ToxHandler
24-
from tox.tox_env.errors import Recreate, Skip
25+
from tox.tox_env.errors import Fail, Recreate, Skip
2526
from tox.tox_env.info import Info
2627
from tox.tox_env.installer import Installer
2728
from tox.util.path import ensure_empty_dir
@@ -132,7 +133,16 @@ def register_config(self) -> None:
132133

133134
def pass_env_post_process(values: list[str]) -> list[str]:
134135
values.extend(self._default_pass_env())
135-
return sorted({k: None for k in values}.keys())
136+
result = sorted({k: None for k in values}.keys())
137+
invalid_chars = set(string.whitespace)
138+
invalid = [v for v in result if any(c in invalid_chars for c in v)]
139+
if invalid:
140+
invalid_repr = ", ".join(repr(i) for i in invalid)
141+
raise Fail(
142+
f"pass_env values cannot contain whitespace, use comma to have multiple values in a single line, "
143+
f"invalid values found {invalid_repr}",
144+
)
145+
return result
136146

137147
self.conf.add_config(
138148
keys=["pass_env", "passenv"],

tests/tox_env/test_tox_env_api.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,26 @@ def test_tox_env_pass_env_literal_miss() -> None:
8080
assert not env
8181

8282

83+
def test_tox_env_pass_env_fails_on_whitespace(tox_project: ToxProjectCreator) -> None:
84+
first, second = "A B", "C D"
85+
prj = tox_project({"tox.ini": f"[testenv]\npackage=skip\npass_env = {first}\n {second}\n E"})
86+
result = prj.run("c", "-k", "pass_env")
87+
result.assert_success()
88+
msg = (
89+
'[testenv:py]\npass_env = # Exception: Fail("pass_env values cannot contain whitespace, use comma to have '
90+
f'multiple values in a single line, invalid values found {first!r}, {second!r}")\n\n[tox]\n'
91+
)
92+
assert result.out == msg
93+
94+
result = prj.run("r")
95+
result.assert_failed(1)
96+
msg = (
97+
"py: failed with pass_env values cannot contain whitespace, use comma to have multiple values in a single line,"
98+
" invalid values found 'A B', 'C D'"
99+
)
100+
assert msg in result.out
101+
102+
83103
@pytest.mark.parametrize("glob", ["*", "?"])
84104
@pytest.mark.parametrize("char", ["a", "A"])
85105
def test_tox_env_pass_env_match_ignore_case(char: str, glob: str) -> None:

0 commit comments

Comments
 (0)