From 9f9e45abb9f69538b24164999d6e5fd8ec8611ef Mon Sep 17 00:00:00 2001 From: Mohamed Koubaa Date: Sat, 27 Jun 2020 17:38:05 -0500 Subject: [PATCH 1/4] Port sha256 module to multi-phase init (PEP 489) --- Modules/sha256module.c | 57 +++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/Modules/sha256module.c b/Modules/sha256module.c index 261f9daee28072..6d0022fcd70afb 100644 --- a/Modules/sha256module.c +++ b/Modules/sha256module.c @@ -681,43 +681,44 @@ static struct PyMethodDef SHA_functions[] = { {NULL, NULL} /* Sentinel */ }; - -/* Initialize this module. */ - -static struct PyModuleDef _sha256module = { - PyModuleDef_HEAD_INIT, - "_sha256", - NULL, - -1, - SHA_functions, - NULL, - NULL, - NULL, - NULL -}; - -PyMODINIT_FUNC -PyInit__sha256(void) +static int sha256_exec(PyObject *module) { - PyObject *m; - Py_SET_TYPE(&SHA224type, &PyType_Type); if (PyType_Ready(&SHA224type) < 0) { - return NULL; + return -1; } Py_SET_TYPE(&SHA256type, &PyType_Type); if (PyType_Ready(&SHA256type) < 0) { - return NULL; + return -1; } - m = PyModule_Create(&_sha256module); - if (m == NULL) - return NULL; - Py_INCREF((PyObject *)&SHA224type); - PyModule_AddObject(m, "SHA224Type", (PyObject *)&SHA224type); + PyModule_AddObject(module, "SHA224Type", (PyObject *)&SHA224type); Py_INCREF((PyObject *)&SHA256type); - PyModule_AddObject(m, "SHA256Type", (PyObject *)&SHA256type); - return m; + PyModule_AddObject(module, "SHA256Type", (PyObject *)&SHA256type); + return 0; +} + +static PyModuleDef_Slot _sha256_slots[] = { + {Py_mod_exec, sha256_exec}, + {0, NULL} +}; +static struct PyModuleDef _sha256module = { + PyModuleDef_HEAD_INIT, + "_sha256", + NULL, + 0, + SHA_functions, + _sha256_slots, + NULL, + NULL, + NULL +}; + +/* Initialize this module. */ +PyMODINIT_FUNC +PyInit__sha256(void) +{ + return PyModuleDef_Init(&_sha256module); } From 598fd1ad73b4b4259bebd7164760b3bbeaf1d86b Mon Sep 17 00:00:00 2001 From: Mohamed Koubaa Date: Wed, 1 Jul 2020 20:17:55 -0500 Subject: [PATCH 2/4] changes requested by review --- ...2020-07-01-20-17-38.bpo-1635741.-AtPYu.rst | 1 + Modules/sha256module.c | 26 ++++++++++++------- 2 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-07-01-20-17-38.bpo-1635741.-AtPYu.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-07-01-20-17-38.bpo-1635741.-AtPYu.rst b/Misc/NEWS.d/next/Core and Builtins/2020-07-01-20-17-38.bpo-1635741.-AtPYu.rst new file mode 100644 index 00000000000000..c529923779fa84 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-07-01-20-17-38.bpo-1635741.-AtPYu.rst @@ -0,0 +1 @@ +Port :mod:`sha256` to multiphase initialization diff --git a/Modules/sha256module.c b/Modules/sha256module.c index 6d0022fcd70afb..176fe759360f1b 100644 --- a/Modules/sha256module.c +++ b/Modules/sha256module.c @@ -693,9 +693,15 @@ static int sha256_exec(PyObject *module) } Py_INCREF((PyObject *)&SHA224type); - PyModule_AddObject(module, "SHA224Type", (PyObject *)&SHA224type); + if (PyModule_AddObject(module, "SHA224Type", (PyObject *)&SHA224type) < 0) { + Py_DECREF(PyObject *)&SHA224type); + return -1; + } Py_INCREF((PyObject *)&SHA256type); - PyModule_AddObject(module, "SHA256Type", (PyObject *)&SHA256type); + if (PyModule_AddObject(module, "SHA256Type", (PyObject *)&SHA256type) < 0) { + Py_DECREF(PyObject *)&SHA256type); + return -1; + } return 0; } @@ -706,14 +712,14 @@ static PyModuleDef_Slot _sha256_slots[] = { static struct PyModuleDef _sha256module = { PyModuleDef_HEAD_INIT, - "_sha256", - NULL, - 0, - SHA_functions, - _sha256_slots, - NULL, - NULL, - NULL + .m_name = "_sha256", + .m_doc = NULL, + .m_size = 0, + .m_methods = SHA_functions, + .m_slots = _sha256_slots, + .m_traverse = NULL, + .m_clear = NULL, + .m_free = NULL }; /* Initialize this module. */ From 5e716b54fe70c716b269f2bddce2b8fce8ef63b5 Mon Sep 17 00:00:00 2001 From: Mohamed Koubaa Date: Wed, 1 Jul 2020 21:59:23 -0500 Subject: [PATCH 3/4] fix compile issue --- Modules/sha256module.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/sha256module.c b/Modules/sha256module.c index 176fe759360f1b..dcc66ca48de668 100644 --- a/Modules/sha256module.c +++ b/Modules/sha256module.c @@ -694,12 +694,12 @@ static int sha256_exec(PyObject *module) Py_INCREF((PyObject *)&SHA224type); if (PyModule_AddObject(module, "SHA224Type", (PyObject *)&SHA224type) < 0) { - Py_DECREF(PyObject *)&SHA224type); + Py_DECREF((PyObject *)&SHA224type); return -1; } Py_INCREF((PyObject *)&SHA256type); if (PyModule_AddObject(module, "SHA256Type", (PyObject *)&SHA256type) < 0) { - Py_DECREF(PyObject *)&SHA256type); + Py_DECREF((PyObject *)&SHA256type); return -1; } return 0; From 300b637bafa27dbc0ea8bf3d82204224e78e1b7b Mon Sep 17 00:00:00 2001 From: Mohamed Koubaa Date: Thu, 2 Jul 2020 19:55:34 -0500 Subject: [PATCH 4/4] remove unneeded field inits --- Modules/sha256module.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Modules/sha256module.c b/Modules/sha256module.c index dcc66ca48de668..06e4430bd7c333 100644 --- a/Modules/sha256module.c +++ b/Modules/sha256module.c @@ -713,13 +713,8 @@ static PyModuleDef_Slot _sha256_slots[] = { static struct PyModuleDef _sha256module = { PyModuleDef_HEAD_INIT, .m_name = "_sha256", - .m_doc = NULL, - .m_size = 0, .m_methods = SHA_functions, .m_slots = _sha256_slots, - .m_traverse = NULL, - .m_clear = NULL, - .m_free = NULL }; /* Initialize this module. */