]> granicus.if.org Git - python/commitdiff
bpo-33499: Fix pymain_init_pycache_prefix() (GH-8596)
authorVictor Stinner <vstinner@redhat.com>
Wed, 1 Aug 2018 14:16:46 +0000 (16:16 +0200)
committerGitHub <noreply@github.com>
Wed, 1 Aug 2018 14:16:46 +0000 (16:16 +0200)
Fix a memory leak in pymain_init_pycache_prefix()
when PYTHONPYCACHEPREFIX and -X pycache_prefix are used.

Modules/main.c

index 664a70ad5ebb5ab4dfc75464ea3408f1aa6ad8a5..34069e1b2d312274392d01475305f7b3e2d060c3 100644 (file)
@@ -1768,16 +1768,6 @@ pymain_init_tracemalloc(_PyCoreConfig *config)
 static _PyInitError
 pymain_init_pycache_prefix(_PyCoreConfig *config)
 {
-    wchar_t *env;
-
-    int res = config_get_env_var_dup(config, &env,
-                                     L"PYTHONPYCACHEPREFIX", "PYTHONPYCACHEPREFIX");
-    if (res < 0) {
-        return DECODE_LOCALE_ERR("PYTHONPYCACHEPREFIX", res);
-    } else if (env) {
-        config->pycache_prefix = env;
-    }
-
     const wchar_t *xoption = config_get_xoption(config, L"pycache_prefix");
     if (xoption) {
         const wchar_t *sep = wcschr(xoption, L'=');
@@ -1790,6 +1780,16 @@ pymain_init_pycache_prefix(_PyCoreConfig *config)
             // -X pycache_prefix= can cancel the env var
             config->pycache_prefix = NULL;
         }
+        return _Py_INIT_OK();
+    }
+
+    wchar_t *env;
+    int res = config_get_env_var_dup(config, &env,
+                                     L"PYTHONPYCACHEPREFIX", "PYTHONPYCACHEPREFIX");
+    if (res < 0) {
+        return DECODE_LOCALE_ERR("PYTHONPYCACHEPREFIX", res);
+    } else if (env) {
+        config->pycache_prefix = env;
     }
 
     return _Py_INIT_OK();