From fe96fc4426e83722003e4c6680b014db272d7024 Mon Sep 17 00:00:00 2001 From: krassowski <5832902+krassowski@users.noreply.github.com> Date: Tue, 9 Apr 2024 16:38:49 +0100 Subject: [PATCH 1/5] Add a test against issue #1076 --- .../jupyter_lsp/tests/test_session.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) 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..ea072e6c9 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,23 @@ async def test_ping(handlers): assert ws_handler._ping_sent is True ws_handler.on_close() + + +@pytest.mark.asyncio +async def test_substitute_env(known_server, handlers, jsonrpc_init_msg): + """should not leak environment variables""" + handler, ws_handler = handlers + manager = handler.manager + + manager.initialize() + + await assert_status_set(handler, {"not_started"}) + + await ws_handler.open(known_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() From eae963f04ca49b262ddca933572038f0f22401f9 Mon Sep 17 00:00:00 2001 From: krassowski <5832902+krassowski@users.noreply.github.com> Date: Tue, 9 Apr 2024 17:09:13 +0100 Subject: [PATCH 2/5] Test against a single server, not all of them --- .../jupyter_lsp/jupyter_lsp/tests/test_session.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 ea072e6c9..ff0c471c8 100644 --- a/python_packages/jupyter_lsp/jupyter_lsp/tests/test_session.py +++ b/python_packages/jupyter_lsp/jupyter_lsp/tests/test_session.py @@ -104,8 +104,10 @@ async def test_ping(handlers): @pytest.mark.asyncio -async def test_substitute_env(known_server, handlers, jsonrpc_init_msg): +async def test_substitute_env(handlers): """should not leak environment variables""" + a_server = "pylsp" + handler, ws_handler = handlers manager = handler.manager @@ -113,7 +115,7 @@ async def test_substitute_env(known_server, handlers, jsonrpc_init_msg): await assert_status_set(handler, {"not_started"}) - await ws_handler.open(known_server) + await ws_handler.open(a_server) session = manager.sessions[ws_handler.language_server] new_env = session.substitute_env({"test-variable": "value"}, os.environ) From 561da04996df23b1b155fb3c325188e66fc434a5 Mon Sep 17 00:00:00 2001 From: krassowski <5832902+krassowski@users.noreply.github.com> Date: Tue, 9 Apr 2024 16:46:12 +0100 Subject: [PATCH 3/5] Fix the issue by using `os._Environ.copy()` --- python_packages/jupyter_lsp/jupyter_lsp/session.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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)}) From 50d05bd963008951ad4956b989e62dbc823c6aa8 Mon Sep 17 00:00:00 2001 From: krassowski <5832902+krassowski@users.noreply.github.com> Date: Tue, 9 Apr 2024 16:47:42 +0100 Subject: [PATCH 4/5] Add changelog entry --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) 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: From da46d77a8b392d02c72f3532d2794723b434aa0d Mon Sep 17 00:00:00 2001 From: krassowski <5832902+krassowski@users.noreply.github.com> Date: Tue, 9 Apr 2024 16:48:10 +0100 Subject: [PATCH 5/5] Bump version to 2.2.5 --- python_packages/jupyter_lsp/jupyter_lsp/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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"