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. */ pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy