GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — bpo-44172: Keep reference to original window in curses subwindow objects by michaelforney · Pull Request #26226 · python/cpython

Conversation

@michaelforney

@michaelforney michaelforney commented May 19, 2021 •
edited by bedevere-bot
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

The X/Open curses specification[0] and ncurses documentation[1]
both state that subwindows must be deleted before the main window.

Deleting the windows in the wrong order causes a double-free with
NetBSD's curses implementation.

To fix this, keep track of the original window object in the subwindow
object, and keep a reference to the original for the lifetime of
the subwindow.

[0] https://pubs.opengroup.org/onlinepubs/7908799/xcurses/delwin.html
[1] https://invisible-island.net/ncurses/man/curs_window.3x.html

https://bugs.python.org/issue44172

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

acheam0 reacted with thumbs up emoji
All reactions
  • 👍 1 reaction
@michaelforney
bpo-44172: Keep reference to original window in curses subwindow objects
90a186a
The X/Open curses specification[0] and ncurses documentation[1]
both state that subwindows must be deleted before the main window.

Deleting the windows in the wrong order causes a double-free with
NetBSD's curses implementation.

To fix this, keep track of the original window object in the subwindow
object, and keep a reference to the original for the lifetime of
the subwindow.

[0] https://pubs.opengroup.org/onlinepubs/7908799/xcurses/delwin.html
[1] https://invisible-island.net/ncurses/man/curs_window.3x.html
@the-knights-who-say-ni the-knights-who-say-ni added the CLA not signed label May 19, 2021
@the-knights-who-say-ni

the-knights-who-say-ni commented May 19, 2021

Copy link
Copy Markdown

Hello, and thanks for your contribution!

I'm a bot set up to make sure that the project can legally accept this contribution by verifying everyone involved has signed the PSF contributor agreement (CLA).

CLA Missing

Our records indicate the following people have not signed the CLA:

@michaelforney

For legal reasons we need all the people listed to sign the CLA before we can look at your contribution. Please follow the steps outlined in the CPython devguide to rectify this issue.

If you have recently signed the CLA, please wait at least one business day
before our records are updated.

You can check yourself to see if the CLA has been received.

Thanks again for the contribution, we look forward to reviewing it!

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@bedevere-bot bedevere-bot added the awaiting review label May 19, 2021
@the-knights-who-say-ni the-knights-who-say-ni added CLA signed and removed CLA not signed labels May 19, 2021
@github-actions

github-actions Bot commented Jun 19, 2021

Copy link
Copy Markdown

This PR is stale because it has been open for 30 days with no activity.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@github-actions github-actions Bot added the stale Stale PR or inactive for long period of time. label Jun 19, 2021
@michaelforney

michaelforney commented Jun 19, 2021

Copy link
Copy Markdown
Contributor Author

Still waiting for a review.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@github-actions github-actions Bot removed the stale Stale PR or inactive for long period of time. label Jun 20, 2021
@michaelforney michaelforney mannequin mentioned this pull request Apr 10, 2022
curses module may call delwin() on original window before subwindows #88338
Closed
@ezio-melotti ezio-melotti removed the CLA signed label Jul 13, 2022
serhiy-storchaka added 3 commits April 12, 2025 21:54
@serhiy-storchaka
Merge branch 'main' into curses-orig
423bf28
@serhiy-storchaka
Add a test.
b04218b
@serhiy-storchaka
Add visitor in tp_traverse.
fac2acc
@serhiy-storchaka
serhiy-storchaka force-pushed the curses-orig branch from 5882a5c to fac2acc Compare April 12, 2025 20:21
@serhiy-storchaka
Update the NEWS entry.
0478d17
serhiy-storchaka
serhiy-storchaka reviewed Apr 12, 2025
View reviewed changes

@serhiy-storchaka serhiy-storchaka left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Thank you for your contribution, @michaelforney. I apologize for the delay in the review.

The code LGTM. I resolved conflicts and added a test. I'll try to test it on NetBSD, but it can take a time. Could you please test that the added test exposes the issue with unpatched code?

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@vstinner vstinner added the OS-netbsd label Apr 14, 2025
@serhiy-storchaka
serhiy-storchaka merged commit 0af61fe into python:main May 4, 2025
@bedevere-app bedevere-app Bot removed the awaiting review label May 4, 2025
@serhiy-storchaka serhiy-storchaka added the needs backport to 3.13 only security fixes label May 4, 2025
@miss-islington-app

miss-islington-app Bot commented May 4, 2025

Copy link
Copy Markdown

Thanks @michaelforney for the PR, and @serhiy-storchaka for merging it 🌮🎉.. I'm working now to backport this PR to: 3.13.
🐍🍒⛏🤖

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@miss-islington-app

miss-islington-app Bot commented May 4, 2025

Copy link
Copy Markdown

Sorry, @michaelforney and @serhiy-storchaka, I could not cleanly backport this to 3.13 due to a conflict.
Please backport using cherry_picker on command line.

cherry_picker 0af61fe2f41048d66b0a973bbff056690446d3df 3.13
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@miss-islington-app miss-islington-app Bot assigned serhiy-storchaka May 4, 2025
serhiy-storchaka added a commit to serhiy-storchaka/cpython that referenced this pull request May 4, 2025
@michaelforney @serhiy-storchaka
[3.13] bpo-44172: Keep reference to original window in curses subwind…
a4ebf5d
…ow objects (pythonGH-26226)

The X/Open curses specification[0] and ncurses documentation[1]
both state that subwindows must be deleted before the main window.

Deleting the windows in the wrong order causes a double-free with
NetBSD's curses implementation.

To fix this, keep track of the original window object in the subwindow
object, and keep a reference to the original for the lifetime of
the subwindow.

[0] https://pubs.opengroup.org/onlinepubs/7908799/xcurses/delwin.html
[1] https://invisible-island.net/ncurses/man/curs_window.3x.html
(cherry picked from commit 0af61fe)

Co-authored-by: Michael Forney <[email protected]>
Co-authored-by: Serhiy Storchaka <[email protected]>
@bedevere-app

bedevere-app Bot commented May 4, 2025

Copy link
Copy Markdown

GH-133370 is a backport of this pull request to the 3.13 branch.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@bedevere-app bedevere-app Bot removed the needs backport to 3.13 only security fixes label May 4, 2025
serhiy-storchaka added a commit that referenced this pull request May 4, 2025
@serhiy-storchaka @michaelforney
[3.13] bpo-44172: Keep reference to original window in curses subwind…
3c9d177
…ow objects (GH-26226) (GH-133370)

The X/Open curses specification[0] and ncurses documentation[1]
both state that subwindows must be deleted before the main window.

Deleting the windows in the wrong order causes a double-free with
NetBSD's curses implementation.

To fix this, keep track of the original window object in the subwindow
object, and keep a reference to the original for the lifetime of
the subwindow.

[0] https://pubs.opengroup.org/onlinepubs/7908799/xcurses/delwin.html
[1] https://invisible-island.net/ncurses/man/curs_window.3x.html
(cherry picked from commit 0af61fe)

Co-authored-by: Michael Forney <[email protected]>
@bedevere-bot

bedevere-bot commented May 4, 2025

Copy link
Copy Markdown

⚠️⚠️⚠️ Buildbot failure ⚠️⚠️⚠️

Hi! The buildbot PPC64LE RHEL8 LTO + PGO 3.x (tier-2) has failed when building commit 0af61fe.

What do you need to do:

  1. Don't panic.
  2. Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
  3. Go to the page of the buildbot that failed (https://buildbot.python.org/#/builders/458/builds/6121) and take a look at the build logs.
  4. Check if the failure is related to this commit (0af61fe) or if it is a false positive.
  5. If the failure is related to this commit, please, reflect that on the issue and make a new Pull Request with a fix.

You can take a look at the buildbot page here:

https://buildbot.python.org/#/builders/458/builds/6121

Failed tests:

  • test_frame

Summary of the results of the build (if available):

==

Click to see traceback logs
remote: Enumerating objects: 19, done.        
remote: Counting objects:   7% (1/14)        
remote: Counting objects:  14% (2/14)        
remote: Counting objects:  21% (3/14)        
remote: Counting objects:  28% (4/14)        
remote: Counting objects:  35% (5/14)        
remote: Counting objects:  42% (6/14)        
remote: Counting objects:  50% (7/14)        
remote: Counting objects:  57% (8/14)        
remote: Counting objects:  64% (9/14)        
remote: Counting objects:  71% (10/14)        
remote: Counting objects:  78% (11/14)        
remote: Counting objects:  85% (12/14)        
remote: Counting objects:  92% (13/14)        
remote: Counting objects: 100% (14/14)        
remote: Counting objects: 100% (14/14), done.        
remote: Compressing objects:   8% (1/12)        
remote: Compressing objects:  16% (2/12)        
remote: Compressing objects:  25% (3/12)        
remote: Compressing objects:  33% (4/12)        
remote: Compressing objects:  41% (5/12)        
remote: Compressing objects:  50% (6/12)        
remote: Compressing objects:  58% (7/12)        
remote: Compressing objects:  66% (8/12)        
remote: Compressing objects:  75% (9/12)        
remote: Compressing objects:  83% (10/12)        
remote: Compressing objects:  91% (11/12)        
remote: Compressing objects: 100% (12/12)        
remote: Compressing objects: 100% (12/12), done.        
remote: Total 19 (delta 2), reused 3 (delta 2), pack-reused 5 (from 2)        
From https://github.com/python/cpython
 * branch                    main       -> FETCH_HEAD
Note: switching to '0af61fe2f41048d66b0a973bbff056690446d3df'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0af61fe2f41 bpo-44172: Keep reference to original window in curses subwindow objects (GH-26226)
Switched to and reset branch 'main'

configure: WARNING: no system libmpdecimal found; falling back to bundled libmpdecimal (deprecated and scheduled for removal in Python 3.15)

find: ‘build’: No such file or directory
find: ‘build’: No such file or directory
find: ‘build’: No such file or directory
find: ‘build’: No such file or directory
make[2]: [Makefile:3340: clean-retain-profile] Error 1 (ignored)
./Modules/_testlimitedcapi/unicode.c: In function ‘test_string_from_format’:
./Modules/_testlimitedcapi/unicode.c:1416:1: note: variable tracking size limit exceeded with -fvar-tracking-assignments, retrying without
 test_string_from_format(PyObject *self, PyObject *Py_UNUSED(ignored))
 ^~~~~~~~~~~~~~~~~~~~~~~
Python/Python-ast.c: In function ‘init_types’:
Python/Python-ast.c:6137:1: note: variable tracking size limit exceeded with -fvar-tracking-assignments, retrying without
 init_types(void *arg)
 ^~~~~~~~~~
./Modules/_testlimitedcapi/unicode.c: In function ‘test_string_from_format’:
./Modules/_testlimitedcapi/unicode.c:1416:1: note: variable tracking size limit exceeded with -fvar-tracking-assignments, retrying without
 test_string_from_format(PyObject *self, PyObject *Py_UNUSED(ignored))
 ^
Python/Python-ast.c: In function ‘init_types’:
Python/Python-ast.c:6137:1: note: variable tracking size limit exceeded with -fvar-tracking-assignments, retrying without
 init_types(void *arg)
 ^
Python/Python-ast.c: In function ‘init_types’:
Python/Python-ast.c:6137:1: note: variable tracking size limit exceeded with -fvar-tracking-assignments, retrying without
 init_types(void *arg)
 ^
Python/Python-ast.c: In function ‘init_types’:
Python/Python-ast.c:6137:1: note: variable tracking size limit exceeded with -fvar-tracking-assignments, retrying without
 init_types(void *arg)
 ^

make: *** [Makefile:2454: buildbottest] Error 2
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

diegorusso added a commit to diegorusso/cpython that referenced this pull request May 4, 2025
@diegorusso
Merge remote-tracking branch 'origin/main' into call-len
c03babc
* origin/main: (111 commits)
  pythongh-91048: Add filename and line number to external inspection routines (pythonGH-133385)
  pythongh-131178: Add tests for `ast` command-line interface (python#133329)
  Regenerate pcbuild.sln in Visual Studio 2022 (python#133394)
  pythongh-133042: disable HACL* HMAC on Emscripten (python#133064)
  pythongh-133351: Fix remote PDB's multi-line block tab completion (python#133387)
  pythongh-109700: Improve stress tests for interpreter creation (pythonGH-109946)
  pythongh-81793: Skip tests for os.link() to symlink on Android (pythonGH-133388)
  pythongh-126835: Rename `ast_opt.c` to `ast_preprocess.c` and related stuff after moving const folding to the peephole optimizier (python#131830)
  pythongh-91048: Relax test_async_global_awaited_by to fix flakyness (python#133368)
  pythongh-132457: make staticmethod and classmethod generic (python#132460)
  pythongh-132805: annotationlib: Fix handling of non-constant values in FORWARDREF (python#132812)
  pythongh-132426: Add get_annotate_from_class_namespace replacing get_annotate_function (python#132490)
  pythongh-81793: Always call linkat() from os.link(), if available (pythonGH-132517)
  pythongh-122559: Synchronize C and Python implementation of the io module about pickling (pythonGH-122628)
  pythongh-69605: Add PyREPL import autocomplete feature to 'What's New' (python#133358)
  bpo-44172: Keep reference to original window in curses subwindow objects (pythonGH-26226)
  pythonGH-133231: Changes to executor management to support proposed `sys._jit` module (pythonGH-133287)
  pythongh-133363: Fix Cmd completion for lines beginning with `! ` (python#133364)
  pythongh-132983: Introduce `_zstd` bindings module (pythonGH-133027)
  pythonGH-91048: Add utils for printing the call stack for asyncio tasks (python#133284)
  ...
Pranjal095 pushed a commit to Pranjal095/cpython that referenced this pull request Jul 12, 2025
@michaelforney @serhiy-storchaka @Pranjal095
bpo-44172: Keep reference to original window in curses subwindow obje…
cc7be47
…cts (pythonGH-26226)

The X/Open curses specification[0] and ncurses documentation[1]
both state that subwindows must be deleted before the main window.

Deleting the windows in the wrong order causes a double-free with
NetBSD's curses implementation.

To fix this, keep track of the original window object in the subwindow
object, and keep a reference to the original for the lifetime of
the subwindow.

[0] https://pubs.opengroup.org/onlinepubs/7908799/xcurses/delwin.html
[1] https://invisible-island.net/ncurses/man/curs_window.3x.html

Co-authored-by: Serhiy Storchaka <[email protected]>
@serhiy-storchaka serhiy-storchaka removed their assignment Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@serhiy-storchaka serhiy-storchaka serhiy-storchaka left review comments

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

OS-netbsd

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

6 participants

@michaelforney @the-knights-who-say-ni @bedevere-bot @serhiy-storchaka @vstinner @ezio-melotti
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.