[Python-checkins] bpo-31650: Remove _Py_CheckHashBasedPycsMode global config var (GH-8608)

Victor Stinner webhook-mailer at python.org
Wed Aug 1 12:18:11 EDT 2018


https://github.com/python/cpython/commit/80b762f010097ab8137782e5fbdc89c5c620ed4e
commit: 80b762f010097ab8137782e5fbdc89c5c620ed4e
branch: master
author: Victor Stinner <vstinner at redhat.com>
committer: GitHub <noreply at github.com>
date: 2018-08-01T18:18:07+02:00
summary:

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.

files:
D Include/internal/import.h
M Include/coreconfig.h
M Modules/zipimport.c
M Programs/_testembed.c
M Python/coreconfig.c
M Python/import.c

diff --git a/Include/coreconfig.h b/Include/coreconfig.h
index 4401729d76f7..b2799075f930 100644
--- a/Include/coreconfig.h
+++ b/Include/coreconfig.h
@@ -241,7 +241,7 @@ typedef struct {
          valid
 
        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. */
     const char *_check_hash_pycs_mode;
@@ -286,6 +286,7 @@ typedef struct {
         .buffered_stdio = -1, \
         _PyCoreConfig_WINDOWS_INIT \
         ._install_importlib = 1, \
+        ._check_hash_pycs_mode = "default", \
         ._frozen = -1}
 /* Note: _PyCoreConfig_INIT sets other fields to 0/NULL */
 
diff --git a/Include/internal/import.h b/Include/internal/import.h
deleted file mode 100644
index 4746e755755f..000000000000
--- a/Include/internal/import.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef Py_INTERNAL_IMPORT_H
-#define Py_INTERNAL_IMPORT_H
-
-extern const char *_Py_CheckHashBasedPycsMode;
-
-#endif
diff --git a/Modules/zipimport.c b/Modules/zipimport.c
index 85013665d1f4..57e7a13137f4 100644
--- a/Modules/zipimport.c
+++ b/Modules/zipimport.c
@@ -1,5 +1,4 @@
 #include "Python.h"
-#include "internal/import.h"
 #include "internal/pystate.h"
 #include "structmember.h"
 #include "osdefs.h"
@@ -1352,12 +1351,13 @@ unmarshal_code(PyObject *pathname, PyObject *data, time_t mtime)
 
     uint32_t flags = get_uint32(buf + 4);
     if (flags != 0) {
+        _PyCoreConfig *config = &PyThreadState_GET()->interp->core_config;
         // Hash-based pyc. We currently refuse to handle checked hash-based
         // pycs. We could validate hash-based pycs against the source, but it
         // seems likely that most people putting hash-based pycs in a zipfile
         // will use unchecked ones.
-        if (strcmp(_Py_CheckHashBasedPycsMode, "never") &&
-            (flags != 0x1 || !strcmp(_Py_CheckHashBasedPycsMode, "always")))
+        if (strcmp(config->_check_hash_pycs_mode, "never") &&
+            (flags != 0x1 || !strcmp(config->_check_hash_pycs_mode, "always")))
             Py_RETURN_NONE;
     } else if ((mtime != 0 && !eq_mtime(get_uint32(buf + 8), mtime))) {
         if (Py_VerboseFlag) {
diff --git a/Programs/_testembed.c b/Programs/_testembed.c
index 1c72580b9c67..3ed42d67f834 100644
--- a/Programs/_testembed.c
+++ b/Programs/_testembed.c
@@ -436,8 +436,6 @@ static int test_init_global_config(void)
     /* FIXME: test Py_LegacyWindowsFSEncodingFlag */
     /* FIXME: test Py_LegacyWindowsStdioFlag */
 
-    /* _Py_CheckHashBasedPycsMode is not public, and so not tested */
-
     Py_Initialize();
     dump_config();
     Py_Finalize();
diff --git a/Python/coreconfig.c b/Python/coreconfig.c
index 7dabe5f96447..829592c3c9b2 100644
--- a/Python/coreconfig.c
+++ b/Python/coreconfig.c
@@ -1,5 +1,4 @@
 #include "Python.h"
-#include "internal/import.h"
 #include "internal/pystate.h"
 
 
@@ -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_LegacyWindowsStdioFlag = 0; /* Uses FileIO instead of WindowsConsoleIO */
 #endif
-const char *_Py_CheckHashBasedPycsMode = "default";
 
 
 void
@@ -317,10 +315,6 @@ _PyCoreConfig_GetGlobalConfig(_PyCoreConfig *config)
     COPY_NOT_FLAG(write_bytecode, Py_DontWriteBytecodeFlag);
     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_NOT_FLAG
 }
@@ -359,10 +353,6 @@ _PyCoreConfig_SetGlobalConfig(const _PyCoreConfig *config)
     COPY_NOT_FLAG(write_bytecode, Py_DontWriteBytecodeFlag);
     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 */
     Py_HashRandomizationFlag = (config->use_hash_seed == 0 ||
                                 config->hash_seed != 0);
diff --git a/Python/import.c b/Python/import.c
index de132a347e05..71d5ea192dbf 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -5,7 +5,6 @@
 #include "Python-ast.h"
 #undef Yield /* undefine macro conflicting with winbase.h */
 #include "internal/hash.h"
-#include "internal/import.h"
 #include "internal/pystate.h"
 #include "errcode.h"
 #include "marshal.h"
@@ -2290,7 +2289,8 @@ PyInit__imp(void)
     d = PyModule_GetDict(m);
     if (d == NULL)
         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) {
         goto failure;
     }



More information about the Python-checkins mailing list