diff --git a/CHANGELOG.md b/CHANGELOG.md index 3997b13d3..57c62430c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## Changelog +### `jupyter-lsp 2.2.5` + +- bug fixes: + - fix for environment variables leaking into the parent environment (#1078) + ### `jupyter-lsp 2.2.4` - bug fixes: diff --git a/python_packages/jupyter_lsp/jupyter_lsp/_version.py b/python_packages/jupyter_lsp/jupyter_lsp/_version.py index 7bc154912..9164c78d6 100644 --- a/python_packages/jupyter_lsp/jupyter_lsp/_version.py +++ b/python_packages/jupyter_lsp/jupyter_lsp/_version.py @@ -1,4 +1,4 @@ """ single source of truth for jupyter_lsp version """ -__version__ = "2.2.4" +__version__ = "2.2.5" diff --git a/python_packages/jupyter_lsp/jupyter_lsp/session.py b/python_packages/jupyter_lsp/jupyter_lsp/session.py index ada89842a..70a9def06 100644 --- a/python_packages/jupyter_lsp/jupyter_lsp/session.py +++ b/python_packages/jupyter_lsp/jupyter_lsp/session.py @@ -6,7 +6,6 @@ import os import string import subprocess -from copy import copy from datetime import datetime, timezone from tornado.ioloop import IOLoop @@ -161,7 +160,7 @@ def init_writer(self): ) def substitute_env(self, env, base): - final_env = copy(os.environ) + final_env = base.copy() for key, value in env.items(): final_env.update({key: string.Template(value).safe_substitute(base)}) diff --git a/python_packages/jupyter_lsp/jupyter_lsp/tests/test_session.py b/python_packages/jupyter_lsp/jupyter_lsp/tests/test_session.py index 5e704550b..ff0c471c8 100644 --- a/python_packages/jupyter_lsp/jupyter_lsp/tests/test_session.py +++ b/python_packages/jupyter_lsp/jupyter_lsp/tests/test_session.py @@ -1,4 +1,5 @@ import asyncio +import os import pytest @@ -100,3 +101,25 @@ async def test_ping(handlers): assert ws_handler._ping_sent is True ws_handler.on_close() + + +@pytest.mark.asyncio +async def test_substitute_env(handlers): + """should not leak environment variables""" + a_server = "pylsp" + + handler, ws_handler = handlers + manager = handler.manager + + manager.initialize() + + await assert_status_set(handler, {"not_started"}) + + await ws_handler.open(a_server) + session = manager.sessions[ws_handler.language_server] + new_env = session.substitute_env({"test-variable": "value"}, os.environ) + + assert "test-variable" in new_env + assert "test-variable" not in os.environ + + ws_handler.on_close()