Unverified Kaydet (Commit) 8ea09110 authored tarafından Victor Stinner's avatar Victor Stinner Kaydeden (comit) GitHub

_Py_CoerceLegacyLocale() restores LC_CTYPE on fail (GH-9044)

bpo-34544: If _Py_CoerceLegacyLocale() fails to coerce the C locale,
restore the LC_CTYPE locale to the its previous value.
üst f01b2a1b
...@@ -363,6 +363,13 @@ void ...@@ -363,6 +363,13 @@ void
_Py_CoerceLegacyLocale(int warn) _Py_CoerceLegacyLocale(int warn)
{ {
#ifdef PY_COERCE_C_LOCALE #ifdef PY_COERCE_C_LOCALE
char *oldloc = NULL;
oldloc = _PyMem_RawStrdup(setlocale(LC_CTYPE, NULL));
if (oldloc == NULL) {
return;
}
const char *locale_override = getenv("LC_ALL"); const char *locale_override = getenv("LC_ALL");
if (locale_override == NULL || *locale_override == '\0') { if (locale_override == NULL || *locale_override == '\0') {
/* LC_ALL is also not set (or is set to an empty string) */ /* LC_ALL is also not set (or is set to an empty string) */
...@@ -384,11 +391,16 @@ defined(HAVE_LANGINFO_H) && defined(CODESET) ...@@ -384,11 +391,16 @@ defined(HAVE_LANGINFO_H) && defined(CODESET)
#endif #endif
/* Successfully configured locale, so make it the default */ /* Successfully configured locale, so make it the default */
_coerce_default_locale_settings(warn, target); _coerce_default_locale_settings(warn, target);
return; goto done;
} }
} }
} }
/* No C locale warning here, as Py_Initialize will emit one later */ /* No C locale warning here, as Py_Initialize will emit one later */
setlocale(LC_CTYPE, oldloc);
done:
PyMem_RawFree(oldloc);
#endif #endif
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment