mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-01 01:51:44 +00:00
fix(cli): prevent .env sanitizer from splitting GLM_API_KEY by LM_API_KEY suffix
The known-key splitter in `_sanitize_env_lines` used substring matching to find concatenated KEY=VALUE pairs. When a registered key was a suffix of another (LM_API_KEY is a suffix of GLM_API_KEY), the shorter key's needle would match inside the longer one, causing the sanitizer to rewrite `GLM_API_KEY=...` as `G\nLM_API_KEY=...` and silently break Z.AI/GLM auth (and similarly `GLM_BASE_URL` -> `G\nLM_BASE_URL`). Drop matches whose needle range is fully contained within a longer overlapping match. Two regression tests cover the suffix-collision case and confirm a real concatenation that happens to start with the longer key still splits where it should. Fixes #17138
This commit is contained in:
parent
97a2474b39
commit
88e07c42b4
2 changed files with 31 additions and 5 deletions
|
|
@ -319,6 +319,23 @@ class TestSanitizeEnvLines:
|
|||
assert result[0].startswith("OPENROUTER_API_KEY=")
|
||||
assert result[1].startswith("OPENAI_BASE_URL=")
|
||||
|
||||
def test_glm_suffix_collision_not_split(self):
|
||||
"""GLM_API_KEY / GLM_BASE_URL must not be mangled by LM_API_KEY / LM_BASE_URL suffixes (#17138)."""
|
||||
lines = [
|
||||
"GLM_API_KEY=glm-secret\n",
|
||||
"GLM_BASE_URL=https://api.z.ai/api/paas/v4\n",
|
||||
]
|
||||
result = _sanitize_env_lines(lines)
|
||||
assert result == lines, f"GLM_* lines were corrupted by suffix collision: {result}"
|
||||
|
||||
def test_suffix_collision_does_not_break_real_concatenation(self):
|
||||
"""A genuine concatenation that happens to start with a suffix-superset key still splits."""
|
||||
lines = ["GLM_API_KEY=glmLM_API_KEY=lm-key\n"]
|
||||
result = _sanitize_env_lines(lines)
|
||||
assert len(result) == 2
|
||||
assert result[0].startswith("GLM_API_KEY=")
|
||||
assert result[1].startswith("LM_API_KEY=")
|
||||
|
||||
def test_save_env_value_fixes_corruption_on_write(self, tmp_path):
|
||||
"""save_env_value sanitizes corrupted lines when writing a new key."""
|
||||
env_file = tmp_path / ".env"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue