mirror of
https://github.com/python/cpython.git
synced 2025-08-23 02:04:56 +00:00
[3.11] gh-86493: Fix possible leaks in some modules initialization (GH-106768) (GH-106855) (GH-106863)
[3.11] [3.12] gh-86493: Fix possible leaks in some modules initialization (GH-106768) (GH-106855) Fix _ssl, _stat, _testinternalcapi, _threadmodule, cmath, math, posix, time. (cherry picked from commit3e65baee72
). (cherry picked from commita423ddbdea
)
This commit is contained in:
parent
0c47ed7bbf
commit
fced79f91e
10 changed files with 45 additions and 62 deletions
|
@ -103,5 +103,6 @@ PyAPI_FUNC(PyObject * const *) _PyArg_UnpackKeywordsWithVararg(
|
||||||
(minpos), (maxpos), (minkw), (buf)))
|
(minpos), (maxpos), (minkw), (buf)))
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) _PyModule_CreateInitialized(PyModuleDef*, int apiver);
|
PyAPI_FUNC(PyObject *) _PyModule_CreateInitialized(PyModuleDef*, int apiver);
|
||||||
|
PyAPI_FUNC(int) _PyModule_Add(PyObject *, const char *, PyObject *);
|
||||||
|
|
||||||
PyAPI_DATA(const char *) _Py_PackageContext;
|
PyAPI_DATA(const char *) _Py_PackageContext;
|
||||||
|
|
|
@ -6130,22 +6130,22 @@ sslmodule_init_versioninfo(PyObject *m)
|
||||||
*/
|
*/
|
||||||
libver = OpenSSL_version_num();
|
libver = OpenSSL_version_num();
|
||||||
r = PyLong_FromUnsignedLong(libver);
|
r = PyLong_FromUnsignedLong(libver);
|
||||||
if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION_NUMBER", r))
|
if (_PyModule_Add(m, "OPENSSL_VERSION_NUMBER", r) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
parse_openssl_version(libver, &major, &minor, &fix, &patch, &status);
|
parse_openssl_version(libver, &major, &minor, &fix, &patch, &status);
|
||||||
r = Py_BuildValue("IIIII", major, minor, fix, patch, status);
|
r = Py_BuildValue("IIIII", major, minor, fix, patch, status);
|
||||||
if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION_INFO", r))
|
if (_PyModule_Add(m, "OPENSSL_VERSION_INFO", r) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
r = PyUnicode_FromString(OpenSSL_version(OPENSSL_VERSION));
|
r = PyUnicode_FromString(OpenSSL_version(OPENSSL_VERSION));
|
||||||
if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION", r))
|
if (_PyModule_Add(m, "OPENSSL_VERSION", r) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
libver = OPENSSL_VERSION_NUMBER;
|
libver = OPENSSL_VERSION_NUMBER;
|
||||||
parse_openssl_version(libver, &major, &minor, &fix, &patch, &status);
|
parse_openssl_version(libver, &major, &minor, &fix, &patch, &status);
|
||||||
r = Py_BuildValue("IIIII", major, minor, fix, patch, status);
|
r = Py_BuildValue("IIIII", major, minor, fix, patch, status);
|
||||||
if (r == NULL || PyModule_AddObject(m, "_OPENSSL_API_VERSION", r))
|
if (_PyModule_Add(m, "_OPENSSL_API_VERSION", r) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -592,15 +592,15 @@ stat_exec(PyObject *module)
|
||||||
ADD_INT_MACRO(module, FILE_ATTRIBUTE_TEMPORARY);
|
ADD_INT_MACRO(module, FILE_ATTRIBUTE_TEMPORARY);
|
||||||
ADD_INT_MACRO(module, FILE_ATTRIBUTE_VIRTUAL);
|
ADD_INT_MACRO(module, FILE_ATTRIBUTE_VIRTUAL);
|
||||||
|
|
||||||
if (PyModule_AddObject(module, "IO_REPARSE_TAG_SYMLINK",
|
if (_PyModule_Add(module, "IO_REPARSE_TAG_SYMLINK",
|
||||||
PyLong_FromUnsignedLong(IO_REPARSE_TAG_SYMLINK)) < 0) {
|
PyLong_FromUnsignedLong(IO_REPARSE_TAG_SYMLINK)) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (PyModule_AddObject(module, "IO_REPARSE_TAG_MOUNT_POINT",
|
if (_PyModule_Add(module, "IO_REPARSE_TAG_MOUNT_POINT",
|
||||||
PyLong_FromUnsignedLong(IO_REPARSE_TAG_MOUNT_POINT)) < 0) {
|
PyLong_FromUnsignedLong(IO_REPARSE_TAG_MOUNT_POINT)) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (PyModule_AddObject(module, "IO_REPARSE_TAG_APPEXECLINK",
|
if (_PyModule_Add(module, "IO_REPARSE_TAG_APPEXECLINK",
|
||||||
PyLong_FromUnsignedLong(IO_REPARSE_TAG_APPEXECLINK)) < 0) {
|
PyLong_FromUnsignedLong(IO_REPARSE_TAG_APPEXECLINK)) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -682,7 +682,7 @@ PyInit__testinternalcapi(void)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PyModule_AddObject(module, "SIZEOF_PYGC_HEAD",
|
if (_PyModule_Add(module, "SIZEOF_PYGC_HEAD",
|
||||||
PyLong_FromSsize_t(sizeof(PyGC_Head))) < 0) {
|
PyLong_FromSsize_t(sizeof(PyGC_Head))) < 0) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1648,7 +1648,7 @@ thread_module_exec(PyObject *module)
|
||||||
// Round towards minus infinity
|
// Round towards minus infinity
|
||||||
timeout_max = floor(timeout_max);
|
timeout_max = floor(timeout_max);
|
||||||
|
|
||||||
if (PyModule_AddObject(module, "TIMEOUT_MAX",
|
if (_PyModule_Add(module, "TIMEOUT_MAX",
|
||||||
PyFloat_FromDouble(timeout_max)) < 0) {
|
PyFloat_FromDouble(timeout_max)) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1264,30 +1264,28 @@ static PyMethodDef cmath_methods[] = {
|
||||||
static int
|
static int
|
||||||
cmath_exec(PyObject *mod)
|
cmath_exec(PyObject *mod)
|
||||||
{
|
{
|
||||||
if (PyModule_AddObject(mod, "pi", PyFloat_FromDouble(Py_MATH_PI)) < 0) {
|
if (_PyModule_Add(mod, "pi", PyFloat_FromDouble(Py_MATH_PI)) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (PyModule_AddObject(mod, "e", PyFloat_FromDouble(Py_MATH_E)) < 0) {
|
if (_PyModule_Add(mod, "e", PyFloat_FromDouble(Py_MATH_E)) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
// 2pi
|
// 2pi
|
||||||
if (PyModule_AddObject(mod, "tau", PyFloat_FromDouble(Py_MATH_TAU)) < 0) {
|
if (_PyModule_Add(mod, "tau", PyFloat_FromDouble(Py_MATH_TAU)) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (PyModule_AddObject(mod, "inf", PyFloat_FromDouble(m_inf())) < 0) {
|
if (_PyModule_Add(mod, "inf", PyFloat_FromDouble(m_inf())) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PyModule_AddObject(mod, "infj",
|
if (_PyModule_Add(mod, "infj", PyComplex_FromCComplex(c_infj())) < 0) {
|
||||||
PyComplex_FromCComplex(c_infj())) < 0) {
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#if _PY_SHORT_FLOAT_REPR == 1
|
#if _PY_SHORT_FLOAT_REPR == 1
|
||||||
if (PyModule_AddObject(mod, "nan", PyFloat_FromDouble(m_nan())) < 0) {
|
if (_PyModule_Add(mod, "nan", PyFloat_FromDouble(m_nan())) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (PyModule_AddObject(mod, "nanj",
|
if (_PyModule_Add(mod, "nanj", PyComplex_FromCComplex(c_nanj())) < 0) {
|
||||||
PyComplex_FromCComplex(c_nanj())) < 0) {
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -3825,21 +3825,21 @@ math_ulp_impl(PyObject *module, double x)
|
||||||
static int
|
static int
|
||||||
math_exec(PyObject *module)
|
math_exec(PyObject *module)
|
||||||
{
|
{
|
||||||
if (PyModule_AddObject(module, "pi", PyFloat_FromDouble(Py_MATH_PI)) < 0) {
|
if (_PyModule_Add(module, "pi", PyFloat_FromDouble(Py_MATH_PI)) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (PyModule_AddObject(module, "e", PyFloat_FromDouble(Py_MATH_E)) < 0) {
|
if (_PyModule_Add(module, "e", PyFloat_FromDouble(Py_MATH_E)) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
// 2pi
|
// 2pi
|
||||||
if (PyModule_AddObject(module, "tau", PyFloat_FromDouble(Py_MATH_TAU)) < 0) {
|
if (_PyModule_Add(module, "tau", PyFloat_FromDouble(Py_MATH_TAU)) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (PyModule_AddObject(module, "inf", PyFloat_FromDouble(m_inf())) < 0) {
|
if (_PyModule_Add(module, "inf", PyFloat_FromDouble(m_inf())) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#if _PY_SHORT_FLOAT_REPR == 1
|
#if _PY_SHORT_FLOAT_REPR == 1
|
||||||
if (PyModule_AddObject(module, "nan", PyFloat_FromDouble(m_nan())) < 0) {
|
if (_PyModule_Add(module, "nan", PyFloat_FromDouble(m_nan())) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -12563,7 +12563,7 @@ setup_confname_table(struct constdef *table, size_t tablesize,
|
||||||
}
|
}
|
||||||
Py_DECREF(o);
|
Py_DECREF(o);
|
||||||
}
|
}
|
||||||
return PyModule_AddObject(module, tablename, d);
|
return _PyModule_Add(module, tablename, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return -1 on failure, 0 on success. */
|
/* Return -1 on failure, 0 on success. */
|
||||||
|
@ -15837,11 +15837,9 @@ posixmodule_exec(PyObject *m)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initialize environ dictionary */
|
/* Initialize environ dictionary */
|
||||||
PyObject *v = convertenviron();
|
if (_PyModule_Add(m, "environ", convertenviron()) != 0) {
|
||||||
Py_XINCREF(v);
|
|
||||||
if (v == NULL || PyModule_AddObject(m, "environ", v) != 0)
|
|
||||||
return -1;
|
return -1;
|
||||||
Py_DECREF(v);
|
}
|
||||||
|
|
||||||
if (all_ins(m))
|
if (all_ins(m))
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -15965,9 +15963,7 @@ posixmodule_exec(PyObject *m)
|
||||||
Py_DECREF(unicode);
|
Py_DECREF(unicode);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyModule_AddObject(m, "_have_functions", list);
|
return _PyModule_Add(m, "_have_functions", list);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1775,11 +1775,9 @@ init_timezone(PyObject *m)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif // MS_WINDOWS
|
#endif // MS_WINDOWS
|
||||||
PyObject *tzname_obj = Py_BuildValue("(NN)", otz0, otz1);
|
if (_PyModule_Add(m, "tzname", Py_BuildValue("(NN)", otz0, otz1)) < 0) {
|
||||||
if (tzname_obj == NULL) {
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
PyModule_AddObject(m, "tzname", tzname_obj);
|
|
||||||
#else // !HAVE_DECL_TZNAME
|
#else // !HAVE_DECL_TZNAME
|
||||||
static const time_t YEAR = (365 * 24 + 6) * 3600;
|
static const time_t YEAR = (365 * 24 + 6) * 3600;
|
||||||
time_t t;
|
time_t t;
|
||||||
|
@ -1822,10 +1820,9 @@ init_timezone(PyObject *m)
|
||||||
PyModule_AddIntConstant(m, "daylight", janzone != julyzone);
|
PyModule_AddIntConstant(m, "daylight", janzone != julyzone);
|
||||||
tzname_obj = Py_BuildValue("(zz)", janname, julyname);
|
tzname_obj = Py_BuildValue("(zz)", janname, julyname);
|
||||||
}
|
}
|
||||||
if (tzname_obj == NULL) {
|
if (_PyModule_Add(m, "tzname", tzname_obj) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
PyModule_AddObject(m, "tzname", tzname_obj);
|
|
||||||
#endif // !HAVE_DECL_TZNAME
|
#endif // !HAVE_DECL_TZNAME
|
||||||
|
|
||||||
if (PyErr_Occurred()) {
|
if (PyErr_Occurred()) {
|
||||||
|
|
|
@ -658,13 +658,16 @@ PyModule_AddObjectRef(PyObject *mod, const char *name, PyObject *value)
|
||||||
PyModule_GetName(mod));
|
PyModule_GetName(mod));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
return PyDict_SetItemString(dict, name, value);
|
||||||
if (PyDict_SetItemString(dict, name, value)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_PyModule_Add(PyObject *mod, const char *name, PyObject *value)
|
||||||
|
{
|
||||||
|
int res = PyModule_AddObjectRef(mod, name, value);
|
||||||
|
Py_XDECREF(value);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PyModule_AddObject(PyObject *mod, const char *name, PyObject *value)
|
PyModule_AddObject(PyObject *mod, const char *name, PyObject *value)
|
||||||
|
@ -679,25 +682,13 @@ PyModule_AddObject(PyObject *mod, const char *name, PyObject *value)
|
||||||
int
|
int
|
||||||
PyModule_AddIntConstant(PyObject *m, const char *name, long value)
|
PyModule_AddIntConstant(PyObject *m, const char *name, long value)
|
||||||
{
|
{
|
||||||
PyObject *obj = PyLong_FromLong(value);
|
return _PyModule_Add(m, name, PyLong_FromLong(value));
|
||||||
if (!obj) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
int res = PyModule_AddObjectRef(m, name, obj);
|
|
||||||
Py_DECREF(obj);
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
|
PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
|
||||||
{
|
{
|
||||||
PyObject *obj = PyUnicode_FromString(value);
|
return _PyModule_Add(m, name, PyUnicode_FromString(value));
|
||||||
if (!obj) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
int res = PyModule_AddObjectRef(m, name, obj);
|
|
||||||
Py_DECREF(obj);
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue