Docker env forwarding empty-secret fallback fixes
Cluster 35580. Data as of
Nothing open on GitHub. Fix merged in #35583. Check it covers your case.
The short answer
- Known?
- Yes. 5 related items grouped here, 1 issue already closed.
- Fix event
- A fix was merged to main in PR #35583. Check it covers your case. No release data is tracked.
- Tracker
- The maintainers' tracker marks this
resolved, deciding PR #35583. That is separate from the fix event. - Still open
- Nothing open on GitHub.
These items address a bug where empty-string forwarded secrets bypass the ~/.hermes/.env disk fallback in Docker, along with related hardening and an attribution mapping. Most members share the empty-env-forwarding theme.
Open issues0
Open PRs0
Fixes on record
-
#35583 fix(tools): fall back to .hermes/.env when forwarded secret is empty
files:
tests/tools/test_docker_environment.py,tools/environments/docker.pyShow the diff
-
tests/tools/test_docker_environment.py@@ -302,6 +302,40 @@ def test_init_env_args_prefers_shell_env_over_hermes_dotenv(monkeypatch): assert "value_from_dotenv" not in args_str +def test_init_env_args_uses_hermes_dotenv_for_empty_shell_env(monkeypatch): + """A transient empty-string in the live env must fall back to .env, not win. + + Regression: the disk fallback used to fire only on `value is None`, so a + present-but-empty `MY_SECRET=""` skipped it and was forwarded as `-e + MY_SECRET=`, clobbering the correct value sitting in ~/.hermes/.env. + """ + env = _make_execute_only_env(["MY_SECRET"]) + + monkeypatch.setenv("MY_SECRET", "") + monkeypatch.setattr(docker_env, "_load_hermes_env_vars", lambda: {"MY_SECRET": "value_from_dotenv"}) + + args = env._build_init_env_args() + + # Assert on the resolved value, not the printed -e flag: the disk value + # must win and a blank "MY_SECRET=" flag must never be emitted. + assert "MY_SECRET=[redacted:secret-assignment]" in args + assert "MY_SECRET=" not in args + + +def test_init_env_args_never_forwards_blank_secret(monkeypatch): + """A legitimately-empty key with no disk value is not forwarded as -e KEY=.""" + env = _make_execute_only_env(["MY_SECRET"]) + + monkeypatch.setenv("MY_SECRET", "") + monkeypatch.setattr(docker_env, "_load_hermes_env_vars", lambda: {}) + + args = env._build_init_env_args() + + # The key must not appear at all — not even as an empty -e MY_SECRET= flag. + assert not any(a.startswith("MY_SECRET=") for a in args) + assert "MY_SECRET" not in " ".join(args) + + # ── docker_env tests ────────────────────────────────────────────── -
tools/environments/docker.py@@ -814,9 +814,9 @@ def _build_init_env_args(self) -> list[str]: hermes_env = _load_hermes_env_vars() if forward_keys else {} for key in sorted(forward_keys): value = os.getenv(key) - if value is None: + if not value: value = hermes_env.get(key) - if value is not None: + if value: exec_env[key] = value args = []
-
-
#36189 chore(attribution): map SiTaggart for PR #35583
files:
scripts/release.py
2 PRs closed without merging
From the close comments: closed without comment 1 · done elsewhere 1
Closed issues · 1
- Closed#35580[Bug]: docker_forward_env forwards empty-string secrets into sandbox, bypassing the ~/.hermes/.env disk fallback
How this cluster was grouped
-
Link evidence (
structural links throughout): every member is connected by structural evidence: shared changed files, or a closing/superseded reference. -
Pairwise link density
0.40: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36.1.00means every pair is linked.
Pick up a Lab task
Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.
Open the Lab