aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/_pyrepl/simple_interact.py
diff options
context:
space:
mode:
authorEugene Triguba <eugenetriguba@gmail.com>2024-06-11 13:40:31 -0400
committerGitHub <noreply@github.com>2024-06-11 17:40:31 +0000
commit86a8a1c57a386fb3330bee0fa44fc3fd6c3042a3 (patch)
treec57a316b21861cb45af433d74c68e386a76d6326 /Lib/_pyrepl/simple_interact.py
parent0335662fe1f663fe96e3e4acf0f34c5959d06b00 (diff)
downloadcpython-86a8a1c57a386fb3330bee0fa44fc3fd6c3042a3.tar.gz
cpython-86a8a1c57a386fb3330bee0fa44fc3fd6c3042a3.zip
gh-118908: Limit exposed globals from internal imports and definitions on new REPL startup (#119547)
Diffstat (limited to 'Lib/_pyrepl/simple_interact.py')
-rw-r--r--Lib/_pyrepl/simple_interact.py21
1 files changed, 18 insertions, 3 deletions
diff --git a/Lib/_pyrepl/simple_interact.py b/Lib/_pyrepl/simple_interact.py
index 2e5698eb131..620f87b4867 100644
--- a/Lib/_pyrepl/simple_interact.py
+++ b/Lib/_pyrepl/simple_interact.py
@@ -27,6 +27,7 @@ from __future__ import annotations
import _sitebuiltins
import linecache
+import builtins
import sys
import code
from types import ModuleType
@@ -34,6 +35,12 @@ from types import ModuleType
from .console import InteractiveColoredConsole
from .readline import _get_reader, multiline_input
+TYPE_CHECKING = False
+
+if TYPE_CHECKING:
+ from typing import Any
+
+
_error: tuple[type[Exception], ...] | type[Exception]
try:
from .unix_console import _error
@@ -73,20 +80,28 @@ REPL_COMMANDS = {
"clear": _clear_screen,
}
+DEFAULT_NAMESPACE: dict[str, Any] = {
+ '__name__': '__main__',
+ '__doc__': None,
+ '__package__': None,
+ '__loader__': None,
+ '__spec__': None,
+ '__annotations__': {},
+ '__builtins__': builtins,
+}
def run_multiline_interactive_console(
mainmodule: ModuleType | None = None,
future_flags: int = 0,
console: code.InteractiveConsole | None = None,
) -> None:
- import __main__
from .readline import _setup
_setup()
- mainmodule = mainmodule or __main__
+ namespace = mainmodule.__dict__ if mainmodule else DEFAULT_NAMESPACE
if console is None:
console = InteractiveColoredConsole(
- mainmodule.__dict__, filename="<stdin>"
+ namespace, filename="<stdin>"
)
if future_flags:
console.compile.compiler.flags |= future_flags