diff options
author | Paulo Henrique Silva <ph.silva@carta.com> | 2020-04-01 15:06:21 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-01 15:06:21 (GMT) |
commit | eacc07439591c97f69ab4a3d17391b009cd78ae2 (patch) | |
tree | 927aae704029b9ca14d08c96b2d236bbe8d3de84 | |
parent | 00002e6d8b0ccdb6e0d9e98a9a7f9c9edfdf1311 (diff) | |
download | cpython-eacc07439591c97f69ab4a3d17391b009cd78ae2.zip cpython-eacc07439591c97f69ab4a3d17391b009cd78ae2.tar.gz cpython-eacc07439591c97f69ab4a3d17391b009cd78ae2.tar.bz2 |
bpo-40071: Fix potential crash in _functoolsmodule.c (GH-19273)
Changes on 7dd549eb0893 made _functools compatible with
PEP-489 and we could have multiple modules instances loaded.
But, right now there is no way to make `kwd_mark` global into
a per module instance variable. kwd_mark is used on lru_cache_new
which does not have a reference to a PyModule*, necessary to use
PyModule_GetState.
PEP-573 will solve this problem and will allow us to move the global
state to per-module data and properly clear the state when unloading
a module instance.
This change temporarily disable cleaning of kwd_mark to avoid NULL
pointer dereference if we clear kwd_mark and other module instances
still alive use it.
-rw-r--r-- | Modules/_functoolsmodule.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index dbe022e..f3d8658 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -1413,7 +1413,10 @@ static PyMethodDef _functools_methods[] = { static void _functools_free(void *m) { - Py_CLEAR(kwd_mark); + // FIXME: Do not clear kwd_mark to avoid NULL pointer dereferencing if we have + // other modules instances that could use it. Will fix when PEP-573 land + // and we could move kwd_mark to a per-module state. + // Py_CLEAR(kwd_mark); } static int |