Commit 80b762f0 authored by Victor Stinner's avatar Victor Stinner Committed by GitHub

bpo-31650: Remove _Py_CheckHashBasedPycsMode global config var (GH-8608)

bpo-31650, bpo-34170: Replace _Py_CheckHashBasedPycsMode with
_PyCoreConfig._check_hash_pycs_mode. Modify PyInit__imp() and
zipimport to get the parameter from the current interpreter core
configuration.

Remove Include/internal/import.h file.
parent 6c785c0e
...@@ -241,7 +241,7 @@ typedef struct { ...@@ -241,7 +241,7 @@ typedef struct {
valid valid
Set by the --check-hash-based-pycs command line option. Set by the --check-hash-based-pycs command line option.
If set to NULL (default), inherit _Py_CheckHashBasedPycsMode value. The default value is "default".
See PEP 552 "Deterministic pycs" for more details. */ See PEP 552 "Deterministic pycs" for more details. */
const char *_check_hash_pycs_mode; const char *_check_hash_pycs_mode;
...@@ -286,6 +286,7 @@ typedef struct { ...@@ -286,6 +286,7 @@ typedef struct {
.buffered_stdio = -1, \ .buffered_stdio = -1, \
_PyCoreConfig_WINDOWS_INIT \ _PyCoreConfig_WINDOWS_INIT \
._install_importlib = 1, \ ._install_importlib = 1, \
._check_hash_pycs_mode = "default", \
._frozen = -1} ._frozen = -1}
/* Note: _PyCoreConfig_INIT sets other fields to 0/NULL */ /* Note: _PyCoreConfig_INIT sets other fields to 0/NULL */
......
#ifndef Py_INTERNAL_IMPORT_H
#define Py_INTERNAL_IMPORT_H
extern const char *_Py_CheckHashBasedPycsMode;
#endif
#include "Python.h" #include "Python.h"
#include "internal/import.h"
#include "internal/pystate.h" #include "internal/pystate.h"
#include "structmember.h" #include "structmember.h"
#include "osdefs.h" #include "osdefs.h"
...@@ -1352,12 +1351,13 @@ unmarshal_code(PyObject *pathname, PyObject *data, time_t mtime) ...@@ -1352,12 +1351,13 @@ unmarshal_code(PyObject *pathname, PyObject *data, time_t mtime)
uint32_t flags = get_uint32(buf + 4); uint32_t flags = get_uint32(buf + 4);
if (flags != 0) { if (flags != 0) {
_PyCoreConfig *config = &PyThreadState_GET()->interp->core_config;
// Hash-based pyc. We currently refuse to handle checked hash-based // Hash-based pyc. We currently refuse to handle checked hash-based
// pycs. We could validate hash-based pycs against the source, but it // pycs. We could validate hash-based pycs against the source, but it
// seems likely that most people putting hash-based pycs in a zipfile // seems likely that most people putting hash-based pycs in a zipfile
// will use unchecked ones. // will use unchecked ones.
if (strcmp(_Py_CheckHashBasedPycsMode, "never") && if (strcmp(config->_check_hash_pycs_mode, "never") &&
(flags != 0x1 || !strcmp(_Py_CheckHashBasedPycsMode, "always"))) (flags != 0x1 || !strcmp(config->_check_hash_pycs_mode, "always")))
Py_RETURN_NONE; Py_RETURN_NONE;
} else if ((mtime != 0 && !eq_mtime(get_uint32(buf + 8), mtime))) { } else if ((mtime != 0 && !eq_mtime(get_uint32(buf + 8), mtime))) {
if (Py_VerboseFlag) { if (Py_VerboseFlag) {
......
...@@ -436,8 +436,6 @@ static int test_init_global_config(void) ...@@ -436,8 +436,6 @@ static int test_init_global_config(void)
/* FIXME: test Py_LegacyWindowsFSEncodingFlag */ /* FIXME: test Py_LegacyWindowsFSEncodingFlag */
/* FIXME: test Py_LegacyWindowsStdioFlag */ /* FIXME: test Py_LegacyWindowsStdioFlag */
/* _Py_CheckHashBasedPycsMode is not public, and so not tested */
Py_Initialize(); Py_Initialize();
dump_config(); dump_config();
Py_Finalize(); Py_Finalize();
......
#include "Python.h" #include "Python.h"
#include "internal/import.h"
#include "internal/pystate.h" #include "internal/pystate.h"
...@@ -52,7 +51,6 @@ int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */ ...@@ -52,7 +51,6 @@ int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */
int Py_LegacyWindowsFSEncodingFlag = 0; /* Uses mbcs instead of utf-8 */ int Py_LegacyWindowsFSEncodingFlag = 0; /* Uses mbcs instead of utf-8 */
int Py_LegacyWindowsStdioFlag = 0; /* Uses FileIO instead of WindowsConsoleIO */ int Py_LegacyWindowsStdioFlag = 0; /* Uses FileIO instead of WindowsConsoleIO */
#endif #endif
const char *_Py_CheckHashBasedPycsMode = "default";
void void
...@@ -317,10 +315,6 @@ _PyCoreConfig_GetGlobalConfig(_PyCoreConfig *config) ...@@ -317,10 +315,6 @@ _PyCoreConfig_GetGlobalConfig(_PyCoreConfig *config)
COPY_NOT_FLAG(write_bytecode, Py_DontWriteBytecodeFlag); COPY_NOT_FLAG(write_bytecode, Py_DontWriteBytecodeFlag);
COPY_NOT_FLAG(user_site_directory, Py_NoUserSiteDirectory); COPY_NOT_FLAG(user_site_directory, Py_NoUserSiteDirectory);
if (config->_check_hash_pycs_mode == NULL) {
config->_check_hash_pycs_mode = _Py_CheckHashBasedPycsMode;
}
#undef COPY_FLAG #undef COPY_FLAG
#undef COPY_NOT_FLAG #undef COPY_NOT_FLAG
} }
...@@ -359,10 +353,6 @@ _PyCoreConfig_SetGlobalConfig(const _PyCoreConfig *config) ...@@ -359,10 +353,6 @@ _PyCoreConfig_SetGlobalConfig(const _PyCoreConfig *config)
COPY_NOT_FLAG(write_bytecode, Py_DontWriteBytecodeFlag); COPY_NOT_FLAG(write_bytecode, Py_DontWriteBytecodeFlag);
COPY_NOT_FLAG(user_site_directory, Py_NoUserSiteDirectory); COPY_NOT_FLAG(user_site_directory, Py_NoUserSiteDirectory);
if (config->_check_hash_pycs_mode != NULL) {
_Py_CheckHashBasedPycsMode = config->_check_hash_pycs_mode;
}
/* Random or non-zero hash seed */ /* Random or non-zero hash seed */
Py_HashRandomizationFlag = (config->use_hash_seed == 0 || Py_HashRandomizationFlag = (config->use_hash_seed == 0 ||
config->hash_seed != 0); config->hash_seed != 0);
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#include "Python-ast.h" #include "Python-ast.h"
#undef Yield /* undefine macro conflicting with winbase.h */ #undef Yield /* undefine macro conflicting with winbase.h */
#include "internal/hash.h" #include "internal/hash.h"
#include "internal/import.h"
#include "internal/pystate.h" #include "internal/pystate.h"
#include "errcode.h" #include "errcode.h"
#include "marshal.h" #include "marshal.h"
...@@ -2290,7 +2289,8 @@ PyInit__imp(void) ...@@ -2290,7 +2289,8 @@ PyInit__imp(void)
d = PyModule_GetDict(m); d = PyModule_GetDict(m);
if (d == NULL) if (d == NULL)
goto failure; goto failure;
PyObject *pyc_mode = PyUnicode_FromString(_Py_CheckHashBasedPycsMode); _PyCoreConfig *config = &PyThreadState_GET()->interp->core_config;
PyObject *pyc_mode = PyUnicode_FromString(config->_check_hash_pycs_mode);
if (pyc_mode == NULL) { if (pyc_mode == NULL) {
goto failure; goto failure;
} }
......
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