Skip to content

gh-46927: Prevent readline from overriding environment#153184

Open
mbriand wants to merge 5 commits into
python:mainfrom
mbriand:fix-issue-46927
Open

gh-46927: Prevent readline from overriding environment#153184
mbriand wants to merge 5 commits into
python:mainfrom
mbriand:fix-issue-46927

Conversation

@mbriand

@mbriand mbriand commented Jul 6, 2026

Copy link
Copy Markdown

Readline library will set the LINES and COLUMNS environment variables during initialization. One might expect these variables to be updated later on SIGWINCH, but this is not the case with cpython.

As a consequence, when the readline module is imported, any process launched from cpython with the default environment will have LINES and COLUMNS variables set, potentially to a wrong value.

Use the rl_change_environment global variable to disable this initial setup of the environment variables.

Issue #46927

--

Sorry, I completely broke the original PR and it got closed: #133585

@ZeroIntensity , @serhiy-storchaka , you did contribute to the discussion of the first PR, so you might have some comments.

mbriand and others added 4 commits July 3, 2026 11:47
Readline library will set the LINES and COLUMNS environment variables
during initialization. One might expect these variables to be updated
later on SIGWINCH, but this is not the case with cpython.

As a consequence, when the readline module is imported, any process
launched from cpython with the default environment will have LINES and
COLUMNS variables set, potentially to a wrong value.

Use the rl_change_environment global variable to disable this initial
setup of the environment variables.
Guard the rl_change_environment assignment with HAVE_RL_CHANGE_ENVIRONMENT,
set by a configure link test, instead of the __APPLE__ macro.  This compiles
it out on any libedit build lacking the symbol, not just on macOS.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@serhiy-storchaka serhiy-storchaka left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. 👍

@serhiy-storchaka serhiy-storchaka enabled auto-merge (squash) July 6, 2026 15:23
@StanFromIreland StanFromIreland disabled auto-merge July 6, 2026 15:45
@StanFromIreland

Copy link
Copy Markdown
Member

Sorry, disabled, I have a little comment.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be in Library.

Comment thread Lib/test/test_readline.py
# See TestHistoryManipulation for the full test.

def test_environment_is_not_modified(self):
# os.environ contains enviroment at the time "os" module was loaded, so

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# os.environ contains enviroment at the time "os" module was loaded, so
# os.environ contains environment at the time "os" module was loaded, so

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants