From 0a37a30037073a4a9ba45e560c8445048e5f2ba2 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 31 Dec 2017 10:04:13 -0800 Subject: [PATCH] closes bpo-32460: ensure all non-static globals have initializers (#5061) --- Modules/_ctypes/_ctypes.c | 4 +-- Modules/_ctypes/_ctypes_test.c | 6 ++-- Modules/_io/_iomodule.c | 52 ++++++++++++++++---------------- Modules/_sqlite/microprotocols.c | 2 +- Modules/_sqlite/microprotocols.h | 4 --- Modules/_sqlite/module.c | 23 ++++++++------ Parser/myreadline.c | 4 +-- Python/pyhash.c | 2 +- Python/pylifecycle.c | 20 ++++++------ 9 files changed, 58 insertions(+), 59 deletions(-) diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 4440ab0d69c..93e8d8d4233 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -116,10 +116,10 @@ bytes(cdata) #endif #include "ctypes.h" -PyObject *PyExc_ArgError; +PyObject *PyExc_ArgError = NULL; /* This dict maps ctypes types to POINTER types */ -PyObject *_ctypes_ptrtype_cache; +PyObject *_ctypes_ptrtype_cache = NULL; static PyTypeObject Simple_Type; diff --git a/Modules/_ctypes/_ctypes_test.c b/Modules/_ctypes/_ctypes_test.c index 2255e573393..620a3c6aea6 100644 --- a/Modules/_ctypes/_ctypes_test.c +++ b/Modules/_ctypes/_ctypes_test.c @@ -63,7 +63,7 @@ typedef struct { } TestReg; -EXPORT(TestReg) last_tfrsuv_arg; +EXPORT(TestReg) last_tfrsuv_arg = {0}; EXPORT(void) @@ -410,8 +410,8 @@ EXPORT(void) _py_func(void) { } -EXPORT(long long) last_tf_arg_s; -EXPORT(unsigned long long) last_tf_arg_u; +EXPORT(long long) last_tf_arg_s = 0; +EXPORT(unsigned long long) last_tf_arg_u = 0; struct BITS { int A: 1, B:2, C:3, D:4, E: 5, F: 6, G: 7, H: 8, I: 9; diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index f0621f4d4ab..cfd78e2d04a 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -26,33 +26,33 @@ /* Various interned strings */ -PyObject *_PyIO_str_close; -PyObject *_PyIO_str_closed; -PyObject *_PyIO_str_decode; -PyObject *_PyIO_str_encode; -PyObject *_PyIO_str_fileno; -PyObject *_PyIO_str_flush; -PyObject *_PyIO_str_getstate; -PyObject *_PyIO_str_isatty; -PyObject *_PyIO_str_newlines; -PyObject *_PyIO_str_nl; -PyObject *_PyIO_str_read; -PyObject *_PyIO_str_read1; -PyObject *_PyIO_str_readable; -PyObject *_PyIO_str_readall; -PyObject *_PyIO_str_readinto; -PyObject *_PyIO_str_readline; -PyObject *_PyIO_str_reset; -PyObject *_PyIO_str_seek; -PyObject *_PyIO_str_seekable; -PyObject *_PyIO_str_setstate; -PyObject *_PyIO_str_tell; -PyObject *_PyIO_str_truncate; -PyObject *_PyIO_str_writable; -PyObject *_PyIO_str_write; +PyObject *_PyIO_str_close = NULL; +PyObject *_PyIO_str_closed = NULL; +PyObject *_PyIO_str_decode = NULL; +PyObject *_PyIO_str_encode = NULL; +PyObject *_PyIO_str_fileno = NULL; +PyObject *_PyIO_str_flush = NULL; +PyObject *_PyIO_str_getstate = NULL; +PyObject *_PyIO_str_isatty = NULL; +PyObject *_PyIO_str_newlines = NULL; +PyObject *_PyIO_str_nl = NULL; +PyObject *_PyIO_str_read = NULL; +PyObject *_PyIO_str_read1 = NULL; +PyObject *_PyIO_str_readable = NULL; +PyObject *_PyIO_str_readall = NULL; +PyObject *_PyIO_str_readinto = NULL; +PyObject *_PyIO_str_readline = NULL; +PyObject *_PyIO_str_reset = NULL; +PyObject *_PyIO_str_seek = NULL; +PyObject *_PyIO_str_seekable = NULL; +PyObject *_PyIO_str_setstate = NULL; +PyObject *_PyIO_str_tell = NULL; +PyObject *_PyIO_str_truncate = NULL; +PyObject *_PyIO_str_writable = NULL; +PyObject *_PyIO_str_write = NULL; -PyObject *_PyIO_empty_str; -PyObject *_PyIO_empty_bytes; +PyObject *_PyIO_empty_str = NULL; +PyObject *_PyIO_empty_bytes = NULL; PyDoc_STRVAR(module_doc, "The io module provides the Python interfaces to stream handling. The\n" diff --git a/Modules/_sqlite/microprotocols.c b/Modules/_sqlite/microprotocols.c index 2261b8013ce..3d01872322c 100644 --- a/Modules/_sqlite/microprotocols.c +++ b/Modules/_sqlite/microprotocols.c @@ -33,7 +33,7 @@ /** the adapters registry **/ -PyObject *psyco_adapters; +static PyObject *psyco_adapters = NULL; /* pysqlite_microprotocols_init - initialize the adapters dictionary */ diff --git a/Modules/_sqlite/microprotocols.h b/Modules/_sqlite/microprotocols.h index 6941716c4cf..99ff6f642b2 100644 --- a/Modules/_sqlite/microprotocols.h +++ b/Modules/_sqlite/microprotocols.h @@ -28,10 +28,6 @@ #include -/** adapters registry **/ - -extern PyObject *psyco_adapters; - /** the names of the three mandatory methods **/ #define MICROPROTOCOLS_GETQUOTED_NAME "getquoted" diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 9066c32db55..879c66692bc 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -35,13 +35,20 @@ /* static objects at module-level */ -PyObject* pysqlite_Error, *pysqlite_Warning, *pysqlite_InterfaceError, *pysqlite_DatabaseError, - *pysqlite_InternalError, *pysqlite_OperationalError, *pysqlite_ProgrammingError, - *pysqlite_IntegrityError, *pysqlite_DataError, *pysqlite_NotSupportedError; +PyObject *pysqlite_Error = NULL; +PyObject *pysqlite_Warning = NULL; +PyObject *pysqlite_InterfaceError = NULL; +PyObject *pysqlite_DatabaseError = NULL; +PyObject *pysqlite_InternalError = NULL; +PyObject *pysqlite_OperationalError = NULL; +PyObject *pysqlite_ProgrammingError = NULL; +PyObject *pysqlite_IntegrityError = NULL; +PyObject *pysqlite_DataError = NULL; +PyObject *pysqlite_NotSupportedError = NULL; -PyObject* converters; -int _enable_callback_tracebacks; -int pysqlite_BaseTypeAdapted; +PyObject* converters = NULL; +int _enable_callback_tracebacks = 0; +int pysqlite_BaseTypeAdapted = 0; static PyObject* module_connect(PyObject* self, PyObject* args, PyObject* kwargs) @@ -461,10 +468,6 @@ PyMODINIT_FUNC PyInit__sqlite3(void) /* initialize the default converters */ converters_init(dict); - _enable_callback_tracebacks = 0; - - pysqlite_BaseTypeAdapted = 0; - error: if (PyErr_Occurred()) { diff --git a/Parser/myreadline.c b/Parser/myreadline.c index 7fe04a9d365..ab6bd4e8300 100644 --- a/Parser/myreadline.c +++ b/Parser/myreadline.c @@ -17,7 +17,7 @@ #endif /* MS_WINDOWS */ -PyThreadState* _PyOS_ReadlineTState; +PyThreadState* _PyOS_ReadlineTState = NULL; #include "pythread.h" static PyThread_type_lock _PyOS_ReadlineLock = NULL; @@ -284,7 +284,7 @@ PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt) Note: Python expects in return a buffer allocated with PyMem_Malloc. */ -char *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *); +char *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *) = NULL; /* Interface used by tokenizer.c and bltinmodule.c */ diff --git a/Python/pyhash.c b/Python/pyhash.c index 1537a0fb490..a0850d066b3 100644 --- a/Python/pyhash.c +++ b/Python/pyhash.c @@ -17,7 +17,7 @@ extern "C" { #endif -_Py_HashSecret_t _Py_HashSecret; +_Py_HashSecret_t _Py_HashSecret = {0}; #if Py_HASH_ALGORITHM == Py_HASH_EXTERNAL extern PyHash_FuncDef PyHash_Func; diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 560d0e36d49..2f61db0d826 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -108,17 +108,17 @@ _Py_IsFinalizing(void) /* Global configuration variable declarations are in pydebug.h */ /* XXX (ncoghlan): move those declarations to pylifecycle.h? */ -int Py_DebugFlag; /* Needed by parser.c */ -int Py_VerboseFlag; /* Needed by import.c */ -int Py_QuietFlag; /* Needed by sysmodule.c */ -int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */ -int Py_InspectFlag; /* Needed to determine whether to exit at SystemExit */ +int Py_DebugFlag = 0; /* Needed by parser.c */ +int Py_VerboseFlag = 0; /* Needed by import.c */ +int Py_QuietFlag = 0; /* Needed by sysmodule.c */ +int Py_InteractiveFlag = 0; /* Needed by Py_FdIsInteractive() below */ +int Py_InspectFlag = 0; /* Needed to determine whether to exit at SystemExit */ int Py_OptimizeFlag = 0; /* Needed by compile.c */ -int Py_NoSiteFlag; /* Suppress 'import site' */ -int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */ -int Py_FrozenFlag; /* Needed by getpath.c */ -int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */ -int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.pyc) */ +int Py_NoSiteFlag = 0; /* Suppress 'import site' */ +int Py_BytesWarningFlag = 0; /* Warn on str(bytes) and str(buffer) */ +int Py_FrozenFlag = 0; /* Needed by getpath.c */ +int Py_IgnoreEnvironmentFlag = 0; /* e.g. PYTHONPATH, PYTHONHOME */ +int Py_DontWriteBytecodeFlag = 0; /* Suppress writing bytecode files (*.pyc) */ int Py_NoUserSiteDirectory = 0; /* for -s and site.py */ int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */ int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */