diff options
| author | Victor Stinner <vstinner@redhat.com> | 2018-10-30 12:58:10 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-10-30 12:58:10 +0100 |
| commit | 905f1ace5f7424e314ca7bed997868a2a3044839 (patch) | |
| tree | 19ad55e69a5370595a3c267be6d0115eda48fff5 /Python/coreconfig.c | |
| parent | b232df9197a19e78d0e2a751e56e0e62547354ec (diff) | |
| download | cpython-git-905f1ace5f7424e314ca7bed997868a2a3044839.tar.gz | |
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/coreconfig.c')
| -rw-r--r-- | Python/coreconfig.c | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/Python/coreconfig.c b/Python/coreconfig.c index fae32e533a..a82175e4fd 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(); } |
