https://github.com/python/cpython/commit/395d766d4f44e45ca4e9053b4761f115de122317
commit: 395d766d4f44e45ca4e9053b4761f115de122317
branch: main
author: Jelle Zijlstra <[email protected]>
committer: gpshead <[email protected]>
date: 2026-10-19T22:56:57Z
summary:

gh-159739: Release replaced PyInitConfig strings (GH-159769)

* gh-159739: Release replaced PyInitConfig strings

Backport to 3.15 and 3.14.

---------

Co-authored-by: Jelle Zijlstra <[email protected]>

files:
A Misc/NEWS.d/next/C_API/2026-10-19-20-38-17.gh-issue-159739.eb9cdc.rst
M Python/initconfig.c

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 363739a1a1b43c..225ee0a3fe5ff2 100644
--- a/Python/initconfig.c
+++ b/Python/initconfig.c
@@ -4368,14 +4368,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;
 }
 

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to