]> granicus.if.org Git - python/commitdiff
bpo-34544: pymain_read_conf() don't change LC_ALL (GH-9045)
authorVictor Stinner <vstinner@redhat.com>
Mon, 3 Sep 2018 15:32:31 +0000 (17:32 +0200)
committerGitHub <noreply@github.com>
Mon, 3 Sep 2018 15:32:31 +0000 (17:32 +0200)
bpo-34485, bpo-34544: Again, pymain_read_conf() leaves LC_ALL locale
unchanged: only modify LC_CTYPE.

Modules/main.c

index 6f817b6c84fdc48b9082bd4175699e1b18af9a75..455178af8bab12d88c174e7a1f76a264179e40ef 100644 (file)
@@ -1291,18 +1291,7 @@ pymain_read_conf(_PyMain *pymain, _PyCoreConfig *config,
     int init_legacy_encoding = Py_LegacyWindowsFSEncodingFlag;
 #endif
     _PyCoreConfig save_config = _PyCoreConfig_INIT;
-    char *oldloc = NULL;
     int res = -1;
-
-    oldloc = _PyMem_RawStrdup(setlocale(LC_ALL, NULL));
-    if (oldloc == NULL) {
-        pymain->err = _Py_INIT_NO_MEMORY();
-        goto done;
-    }
-
-    /* Reconfigure the locale to the default for this process */
-    _Py_SetLocaleFromEnv(LC_ALL);
-
     int locale_coerced = 0;
     int loops = 0;
 
@@ -1311,6 +1300,9 @@ pymain_read_conf(_PyMain *pymain, _PyCoreConfig *config,
         goto done;
     }
 
+    /* Set LC_CTYPE to the user preferred locale */
+    _Py_SetLocaleFromEnv(LC_CTYPE);
+
     while (1) {
         int utf8_mode = config->utf8_mode;
         int encoding_changed = 0;
@@ -1392,10 +1384,6 @@ pymain_read_conf(_PyMain *pymain, _PyCoreConfig *config,
 
 done:
     _PyCoreConfig_Clear(&save_config);
-    if (oldloc != NULL) {
-        setlocale(LC_ALL, oldloc);
-        PyMem_RawFree(oldloc);
-    }
     Py_UTF8Mode = init_utf8_mode ;
 #ifdef MS_WINDOWS
     Py_LegacyWindowsFSEncodingFlag = init_legacy_encoding;