From 21220bbe65108f5a763ead24a6b572f80d84c9e2 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 30 Oct 2018 12:59:20 +0100 Subject: bpo-34403: Fix initfsencoding() for ASCII (GH-10233) * Add _Py_GetForceASCII(): check if Python forces the usage of ASCII in Py_DecodeLocale() and Py_EncodeLocale(). * initfsencoding() now uses ASCII if _Py_GetForceASCII() is true. --- Include/fileutils.h | 4 ++++ Python/fileutils.c | 12 ++++++++++++ Python/pylifecycle.c | 4 ++++ 3 files changed, 20 insertions(+) diff --git a/Include/fileutils.h b/Include/fileutils.h index c05ff43..d75189a 100644 --- a/Include/fileutils.h +++ b/Include/fileutils.h @@ -183,6 +183,10 @@ PyAPI_FUNC(int) _Py_GetLocaleconvNumeric( #endif /* Py_LIMITED_API */ +#ifdef Py_BUILD_CORE +PyAPI_FUNC(int) _Py_GetForceASCII(void); +#endif + #ifdef __cplusplus } #endif diff --git a/Python/fileutils.c b/Python/fileutils.c index e72ce54..1b7e669 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -180,6 +180,18 @@ error: return 1; } + +int +_Py_GetForceASCII(void) +{ + if (force_ascii == -1) { + force_ascii = check_force_ascii(); + } + return force_ascii; +} + + + static int encode_ascii(const wchar_t *text, char **str, size_t *error_pos, const char **reason, diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index ba4b548..c01b21f 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -1615,6 +1615,10 @@ initfsencoding(PyInterpreterState *interp) Py_FileSystemDefaultEncoding = "utf-8"; Py_HasFileSystemDefaultEncoding = 1; } + else if (_Py_GetForceASCII()) { + Py_FileSystemDefaultEncoding = "ascii"; + Py_HasFileSystemDefaultEncoding = 1; + } else if (Py_FileSystemDefaultEncoding == NULL) { Py_FileSystemDefaultEncoding = get_locale_encoding(); if (Py_FileSystemDefaultEncoding == NULL) { -- cgit v0.12