From 9d8066883a888b61111a4d13c1ac6982e1f18c81 Mon Sep 17 00:00:00 2001 From: Kumar Aditya Date: Sat, 16 Nov 2024 16:31:55 +0530 Subject: [PATCH 1/4] fix finalization of dtoa state --- Python/dtoa.c | 1 + Python/pylifecycle.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Python/dtoa.c b/Python/dtoa.c index d0c89b2b468f75..2cf888461255c2 100644 --- a/Python/dtoa.c +++ b/Python/dtoa.c @@ -697,6 +697,7 @@ pow5mult(Bigint *b, int k) for(;;) { assert(p5s != interp->dtoa.p5s + Bigint_Pow5size); p5 = *p5s; + assert(p5 != NULL); p5s++; if (k & 1) { b1 = mult(b, p5); diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 23882d083844ac..79b0ef84e7524d 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -1888,7 +1888,6 @@ finalize_interp_clear(PyThreadState *tstate) _PyXI_Fini(tstate->interp); _PyExc_ClearExceptionGroupType(tstate->interp); _Py_clear_generic_types(tstate->interp); - _PyDtoa_Fini(tstate->interp); /* Clear interpreter state and all thread states */ _PyInterpreterState_Clear(tstate); @@ -1910,6 +1909,8 @@ finalize_interp_clear(PyThreadState *tstate) finalize_interp_types(tstate->interp); + _PyDtoa_Fini(tstate->interp); + /* Free any delayed free requests immediately */ _PyMem_FiniDelayed(tstate->interp); From a83cc6166fe4df3a0dbc5a0fdfaae00a11150957 Mon Sep 17 00:00:00 2001 From: Kumar Aditya Date: Sat, 16 Nov 2024 16:35:44 +0530 Subject: [PATCH 2/4] add comment --- Python/pylifecycle.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 79b0ef84e7524d..ceb30e9f02df2c 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -1909,6 +1909,7 @@ finalize_interp_clear(PyThreadState *tstate) finalize_interp_types(tstate->interp); + /* Finalize dtoa at last so that finalizers calling repr of float doesn't crash */ _PyDtoa_Fini(tstate->interp); /* Free any delayed free requests immediately */ From 59f9594db34bbd3416359eafe5990a9328b120cc Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Sat, 16 Nov 2024 11:11:39 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2024-11-16-11-11-35.gh-issue-126881.ijofLZ.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2024-11-16-11-11-35.gh-issue-126881.ijofLZ.rst diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2024-11-16-11-11-35.gh-issue-126881.ijofLZ.rst b/Misc/NEWS.d/next/Core_and_Builtins/2024-11-16-11-11-35.gh-issue-126881.ijofLZ.rst new file mode 100644 index 00000000000000..13381c7630d7ce --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2024-11-16-11-11-35.gh-issue-126881.ijofLZ.rst @@ -0,0 +1 @@ +Fix crash in finalization of dtoa state. Patch by Kumar Aditya. From 1b901249ab857fe320e657bfd64ddac857073fb2 Mon Sep 17 00:00:00 2001 From: Kumar Aditya Date: Fri, 29 Nov 2024 14:26:48 +0530 Subject: [PATCH 4/4] remove assert --- Python/dtoa.c | 1 - 1 file changed, 1 deletion(-) diff --git a/Python/dtoa.c b/Python/dtoa.c index 2cf888461255c2..d0c89b2b468f75 100644 --- a/Python/dtoa.c +++ b/Python/dtoa.c @@ -697,7 +697,6 @@ pow5mult(Bigint *b, int k) for(;;) { assert(p5s != interp->dtoa.p5s + Bigint_Pow5size); p5 = *p5s; - assert(p5 != NULL); p5s++; if (k & 1) { b1 = mult(b, p5);