aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/coreconfig.c
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2019-05-01 01:36:13 +0200
committerGitHub <noreply@github.com>2019-05-01 01:36:13 +0200
commit463b82a3efe8a6a9f3924a5b37482e961dffe3b8 (patch)
treea6d89da885ec7dd2eddd1eea2ec3b8334fe08ee0 /Python/coreconfig.c
parent0df635c7f8aa69e56a092bd4f142f0f164741ab2 (diff)
downloadcpython-463b82a3efe8a6a9f3924a5b37482e961dffe3b8.tar.gz
cpython-463b82a3efe8a6a9f3924a5b37482e961dffe3b8.zip
bpo-36763: Fix Py_SetStandardStreamEncoding() (GH-13028)
Fix memory leak in Py_SetStandardStreamEncoding(): release memory if the function is called twice.
Diffstat (limited to 'Python/coreconfig.c')
-rw-r--r--Python/coreconfig.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/Python/coreconfig.c b/Python/coreconfig.c
index d05beef2aa5..471d5126f80 100644
--- a/Python/coreconfig.c
+++ b/Python/coreconfig.c
@@ -375,6 +375,7 @@ Py_SetStandardStreamEncoding(const char *encoding, const char *errors)
* Py_Initialize hasn't been called yet.
*/
if (encoding) {
+ PyMem_RawFree(_Py_StandardStreamEncoding);
_Py_StandardStreamEncoding = _PyMem_RawStrdup(encoding);
if (!_Py_StandardStreamEncoding) {
res = -2;
@@ -382,11 +383,11 @@ Py_SetStandardStreamEncoding(const char *encoding, const char *errors)
}
}
if (errors) {
+ PyMem_RawFree(_Py_StandardStreamErrors);
_Py_StandardStreamErrors = _PyMem_RawStrdup(errors);
if (!_Py_StandardStreamErrors) {
- if (_Py_StandardStreamEncoding) {
- PyMem_RawFree(_Py_StandardStreamEncoding);
- }
+ PyMem_RawFree(_Py_StandardStreamEncoding);
+ _Py_StandardStreamEncoding = NULL;
res = -3;
goto done;
}