From 2797a0c7482eff6fc2c61b9408583e8da1c3babc Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Mon, 19 Oct 2026 15:56:57 -0700 Subject: [PATCH] gh-159739: Release replaced PyInitConfig strings (GH-159769) * gh-159739: Release replaced PyInitConfig strings Backport to 3.15 and 3.14. --------- (cherry picked from commit 395d766d4f44e45ca4e9053b4761f115de122317) Co-authored-by: Jelle Zijlstra Co-authored-by: Jelle Zijlstra --- .../C_API/2026-10-19-20-38-17.gh-issue-159739.eb9cdc.rst | 2 ++ Python/initconfig.c | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/C_API/2026-10-19-20-38-17.gh-issue-159739.eb9cdc.rst diff --git a/Misc/NEWS.d/next/C_API/2026-10-19-20-38-17.gh-issue-159739.eb9cdc.rst b/Misc/NEWS.d/next/C_API/2026-10-19-20-38-17.gh-issue-159739.eb9cdc.rst new file mode 100644 index 000000000000000..e3ca598d37fdcef --- /dev/null +++ b/Misc/NEWS.d/next/C_API/2026-10-19-20-38-17.gh-issue-159739.eb9cdc.rst @@ -0,0 +1,2 @@ +:c:func:`PyInitConfig_SetStr` now releases a previously configured value and +preserves it if conversion of the replacement fails. diff --git a/Python/initconfig.c b/Python/initconfig.c index 7a20735aa6be68b..ff10320897bf686 100644 --- a/Python/initconfig.c +++ b/Python/initconfig.c @@ -4135,14 +4135,17 @@ PyInitConfig_SetStr(PyInitConfig *config, const char *name, const char* value) if (value == NULL && spec->type != PyConfig_MEMBER_WSTR_OPT) { initconfig_set_error(config, "config option string cannot be NULL"); + return -1; } wchar_t **member = raw_member; - *member = utf8_to_wstr(config, value); - if (*member == NULL) { + wchar_t *wstr = utf8_to_wstr(config, value); + if (wstr == NULL) { return -1; } + free(*member); + *member = wstr; return 0; }