Skip to content

Commit df42710

Browse files
ampagentIsaac Miller
andcommitted
Remove mutable builtin baseline
Amp-Thread-ID: https://ampcode.com/threads/T-019fcce1-bc8b-753e-886f-9b77c0ccb376 Co-authored-by: Isaac Miller <isaac@cmpnd.ai>
1 parent 538467c commit df42710

2 files changed

Lines changed: 5 additions & 3 deletions

File tree

‎dspy/primitives/local_interpreter_worker.py‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ def __init__(self, value: Any) -> None:
1717

1818
class Session:
1919
def __init__(self) -> None:
20-
self._builtins = vars(builtins).copy()
21-
self.namespace: dict[str, Any] = {"__builtins__": self._builtins.copy()}
20+
self.namespace: dict[str, Any] = {"__builtins__": vars(builtins).copy()}
2221
self.tool_names: set[str] = set()
2322
self.output_fields: list[dict[str, Any]] | None = None
2423

@@ -49,7 +48,7 @@ def configure(self, tool_names: list[str], output_fields: list[dict[str, Any]] |
4948
self.output_fields = output_fields
5049
for name in tool_names:
5150
self.namespace[name] = lambda *args, __name=name, **kwargs: self.call_tool(__name, *args, **kwargs)
52-
self.namespace["__builtins__"] = self._builtins.copy()
51+
self.namespace["__builtins__"] = vars(builtins).copy()
5352
self.namespace["SUBMIT"] = self.submit
5453

5554
def submit(self, *args: Any, **kwargs: Any) -> None:

‎tests/primitives/test_local_interpreter.py‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ def test_guest_cannot_corrupt_interpreter_owned_globals_across_executions():
9494
assert interpreter.execute("len([1])") == 1
9595
assert interpreter.execute("add(19, 23)") == 42
9696
assert interpreter.execute("SUBMIT(42)").output == {"output": 42}
97+
with pytest.raises(CodeExecutionError, match="_builtins"):
98+
interpreter.execute("SUBMIT.__self__._builtins['len'] = None")
99+
assert interpreter.execute("len([1])") == 1
97100

98101

99102
def test_errors_are_recoverable_but_timeout_is_terminal():

0 commit comments

Comments
 (0)