From cdc992248b8a9651cf67aa695385261ef16c6678 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 00000000000000..e3ca598d37fdce --- /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 c95df5b6ef2158..e21cbaaca5b89b 100644 --- a/Python/initconfig.c +++ b/Python/initconfig.c @@ -4357,14 +4357,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; }