Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test_curses reference leak in the Python main branch #94644

Closed
vstinner opened this issue Jul 7, 2022 · 5 comments
Closed

test_curses reference leak in the Python main branch #94644

vstinner opened this issue Jul 7, 2022 · 5 comments
Assignees
Labels
3.12 bugs and security fixes type-bug An unexpected behavior, bug, or error

Comments

@vstinner
Copy link
Member

vstinner commented Jul 7, 2022

At commit e925241, test_curses leaks references:

$ ./python -m test test_curses -m test_output_string_embedded_null_chars -u all  -R 3:3
(...)
test_curses leaked [4, 4, 4] references, sum=12

I reproduce the issue on Fedora.

Example of failing buildbot: https://buildbot.python.org/all/#/builders/16/builds/244

Before this change, Python doesn't leak references.

Before: make:

gcc -fPIC -g -Og -Wall -O0 -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -DHAVE_NCURSESW=1 -I/usr/include/ncursesw -I./Include -I. -I/usr/local/include -I/home/vstinner/python/main/Include -I/home/vstinner/python/main -c /home/vstinner/python/main/Modules/_cursesmodule.c -o build/temp.linux-x86_64-3.12-pydebug/home/vstinner/python/main/Modules/_cursesmodule.o

gcc -fPIC -g -Og -Wall -O0 -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -DHAVE_NCURSESW=1 -I/usr/include/ncursesw -I./Include -I. -I/usr/local/include -I/home/vstinner/python/main/Include -I/home/vstinner/python/main -c /home/vstinner/python/main/Modules/_curses_panel.c -o build/temp.linux-x86_64-3.12-pydebug/home/vstinner/python/main/Modules/_curses_panel.o

After: make:

gcc -fPIC -g -Og -Wall -O0 -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -D_DEFAULT_SOURCE -I./Include -I. -I/usr/local/include -I/home/vstinner/python/main/Include -I/home/vstinner/python/main -c /home/vstinner/python/main/Modules/_cursesmodule.c -o build/temp.linux-x86_64-3.12-pydebug/home/vstinner/python/main/Modules/_cursesmodule.o

gcc -fPIC -g -Og -Wall -O0 -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -D_DEFAULT_SOURCE -I./Include -I. -I/usr/local/include -I/home/vstinner/python/main/Include -I/home/vstinner/python/main -c /home/vstinner/python/main/Modules/_curses_panel.c -o build/temp.linux-x86_64-3.12-pydebug/home/vstinner/python/main/Modules/_curses_panel.o

The commit removes -DHAVE_NCURSESW=1 -I/usr/include/ncursesw options and adds -D_DEFAULT_SOURCE option to the (gcc) build command line of the _curses extension.

cc @tiran @erlend-aasland

@vstinner vstinner added the type-bug An unexpected behavior, bug, or error label Jul 7, 2022
@tiran
Copy link
Member

tiran commented Jul 7, 2022

HAVE_NCURSESW should be added to pyconfig.h. The pkg-config branch does not define the config value.

The problem may have revealed an old bug in the non-wide curses build.

@kumaraditya303 kumaraditya303 added the 3.12 bugs and security fixes label Jul 7, 2022
@kumaraditya303 kumaraditya303 self-assigned this Jul 7, 2022
tiran added a commit to tiran/cpython that referenced this issue Jul 7, 2022
miss-islington pushed a commit to miss-islington/cpython that referenced this issue Jul 7, 2022
(cherry picked from commit 277f55c)

Co-authored-by: Kumar Aditya <[email protected]>
miss-islington pushed a commit to miss-islington/cpython that referenced this issue Jul 7, 2022
(cherry picked from commit 277f55c)

Co-authored-by: Kumar Aditya <[email protected]>
@tiran
Copy link
Member

tiran commented Jul 7, 2022

@kumaraditya303 fixed the reference leak when the curses module is built without ncursesw. I addressed the missing HAVE_NCURSESW in the pkg-config branch. Additional defines and include directories are now coming from pkg-config or env var overrides.

miss-islington added a commit that referenced this issue Jul 7, 2022
(cherry picked from commit 277f55c)

Co-authored-by: Kumar Aditya <[email protected]>
@vstinner
Copy link
Member Author

vstinner commented Jul 7, 2022

I addressed the missing HAVE_NCURSESW in the pkg-config branch.

What is this branch?

@tiran
Copy link
Member

tiran commented Jul 7, 2022

The TRUE branch in PKG_CHECK_MODULES call:

    PKG_CHECK_MODULES([CURSES], [ncursesw], [
      AC_DEFINE([HAVE_NCURSESW], [1]) <<<<<<<<<<<<<<<<<<<< this line was missing
      have_curses=ncursesw
    ], [
      WITH_SAVE_ENV([
        AC_CHECK_LIB([ncursesw], [initscr], [
          AC_DEFINE([HAVE_NCURSESW], [1])
          have_curses=ncursesw
          CURSES_CFLAGS=${CURSES_CFLAGS-""}
          CURSES_LIBS=${CURSES_LIBS-"-lncursesw"}
        ])
      ])
    ])

miss-islington added a commit that referenced this issue Jul 7, 2022
(cherry picked from commit 277f55c)

Co-authored-by: Kumar Aditya <[email protected]>
@tiran tiran closed this as completed Jul 7, 2022
@vstinner
Copy link
Member Author

vstinner commented Jul 7, 2022

At commit b6558d7, the HAVE_NCURSESW macro is now defined as 1 in pyconfig.h:

/* Define to 1 if you have the `ncursesw' library. */
#define HAVE_NCURSESW 1

Thanks for the fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3.12 bugs and security fixes type-bug An unexpected behavior, bug, or error
Projects
None yet
Development

No branches or pull requests

3 participants