summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2018-10-30 11:58:10 (GMT)
committerGitHub <noreply@github.com>2018-10-30 11:58:10 (GMT)
commit905f1ace5f7424e314ca7bed997868a2a3044839 (patch)
tree19ad55e69a5370595a3c267be6d0115eda48fff5 /Python
parentb232df9197a19e78d0e2a751e56e0e62547354ec (diff)
downloadcpython-905f1ace5f7424e314ca7bed997868a2a3044839.zip
cpython-905f1ace5f7424e314ca7bed997868a2a3044839.tar.gz
cpython-905f1ace5f7424e314ca7bed997868a2a3044839.tar.bz2
bpo-34523: Fix config_init_fs_encoding() for ASCII (GH-10232)
* bpo-34523, bpo-34403: Fix config_init_fs_encoding(): it now uses ASCII if _Py_GetForceASCII() is true. * Fix a regression of commit b2457efc78b74a1d6d1b77d11a939e886b8a4e2c. * Fix also a memory leak: get_locale_encoding() already allocates memory, no need to duplicate the string.
Diffstat (limited to 'Python')
-rw-r--r--Python/coreconfig.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/Python/coreconfig.c b/Python/coreconfig.c
index fae32e5..a82175e 100644
--- a/Python/coreconfig.c
+++ b/Python/coreconfig.c
@@ -1164,13 +1164,17 @@ config_init_fs_encoding(_PyCoreConfig *config)
}
}
- /* Windows defaults to utf-8/surrogatepass (PEP 529) */
+ /* Windows defaults to utf-8/surrogatepass (PEP 529).
+
+ Note: UTF-8 Mode takes the same code path and the Legacy Windows FS
+ encoding has the priortiy over UTF-8 Mode. */
if (config->filesystem_encoding == NULL) {
config->filesystem_encoding = _PyMem_RawStrdup("utf-8");
if (config->filesystem_encoding == NULL) {
return _Py_INIT_NO_MEMORY();
}
}
+
if (config->filesystem_errors == NULL) {
config->filesystem_errors = _PyMem_RawStrdup("surrogatepass");
if (config->filesystem_errors == NULL) {
@@ -1178,30 +1182,28 @@ config_init_fs_encoding(_PyCoreConfig *config)
}
}
#else
- if (config->utf8_mode) {
- /* UTF-8 Mode use: utf-8/surrogateescape */
- if (config->filesystem_encoding == NULL) {
+ if (config->filesystem_encoding == NULL) {
+ if (config->utf8_mode) {
+ /* UTF-8 Mode use: utf-8/surrogateescape */
config->filesystem_encoding = _PyMem_RawStrdup("utf-8");
- if (config->filesystem_encoding == NULL) {
- return _Py_INIT_NO_MEMORY();
- }
+ /* errors defaults to surrogateescape above */
}
- /* errors defaults to surrogateescape above */
- }
-
- if (config->filesystem_encoding == NULL) {
- /* macOS and Android use UTF-8, other platforms use
- the locale encoding. */
- char *locale_encoding;
+ else if (_Py_GetForceASCII()) {
+ config->filesystem_encoding = _PyMem_RawStrdup("ascii");
+ }
+ else {
+ /* macOS and Android use UTF-8,
+ other platforms use the locale encoding. */
#if defined(__APPLE__) || defined(__ANDROID__)
- locale_encoding = "UTF-8";
+ config->filesystem_encoding = _PyMem_RawStrdup("utf-8");
#else
- _PyInitError err = get_locale_encoding(&locale_encoding);
- if (_Py_INIT_FAILED(err)) {
- return err;
- }
+ _PyInitError err = get_locale_encoding(&config->filesystem_encoding);
+ if (_Py_INIT_FAILED(err)) {
+ return err;
+ }
#endif
- config->filesystem_encoding = _PyMem_RawStrdup(locale_encoding);
+ }
+
if (config->filesystem_encoding == NULL) {
return _Py_INIT_NO_MEMORY();
}