Skip to content

Commit 3e65bae

Browse files
gh-86493: Fix possible leaks in some modules initialization (GH-106768)
Fix _ssl, _stat, _testinternalcapi, _threadmodule, cmath, math, posix, time.
1 parent 83ac128 commit 3e65bae

8 files changed

+37
-45
lines changed

Modules/_ssl.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -6118,22 +6118,22 @@ sslmodule_init_versioninfo(PyObject *m)
61186118
*/
61196119
libver = OpenSSL_version_num();
61206120
r = PyLong_FromUnsignedLong(libver);
6121-
if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION_NUMBER", r))
6121+
if (PyModule_Add(m, "OPENSSL_VERSION_NUMBER", r) < 0)
61226122
return -1;
61236123

61246124
parse_openssl_version(libver, &major, &minor, &fix, &patch, &status);
61256125
r = Py_BuildValue("IIIII", major, minor, fix, patch, status);
6126-
if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION_INFO", r))
6126+
if (PyModule_Add(m, "OPENSSL_VERSION_INFO", r) < 0)
61276127
return -1;
61286128

61296129
r = PyUnicode_FromString(OpenSSL_version(OPENSSL_VERSION));
6130-
if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION", r))
6130+
if (PyModule_Add(m, "OPENSSL_VERSION", r) < 0)
61316131
return -1;
61326132

61336133
libver = OPENSSL_VERSION_NUMBER;
61346134
parse_openssl_version(libver, &major, &minor, &fix, &patch, &status);
61356135
r = Py_BuildValue("IIIII", major, minor, fix, patch, status);
6136-
if (r == NULL || PyModule_AddObject(m, "_OPENSSL_API_VERSION", r))
6136+
if (PyModule_Add(m, "_OPENSSL_API_VERSION", r) < 0)
61376137
return -1;
61386138

61396139
return 0;

Modules/_stat.c

+9-9
Original file line numberDiff line numberDiff line change
@@ -591,17 +591,17 @@ stat_exec(PyObject *module)
591591
ADD_INT_MACRO(module, FILE_ATTRIBUTE_TEMPORARY);
592592
ADD_INT_MACRO(module, FILE_ATTRIBUTE_VIRTUAL);
593593

594-
if (PyModule_AddObject(module, "IO_REPARSE_TAG_SYMLINK",
595-
PyLong_FromUnsignedLong(IO_REPARSE_TAG_SYMLINK)) < 0) {
596-
return -1;
594+
if (PyModule_Add(module, "IO_REPARSE_TAG_SYMLINK",
595+
PyLong_FromUnsignedLong(IO_REPARSE_TAG_SYMLINK)) < 0) {
596+
return -1;
597597
}
598-
if (PyModule_AddObject(module, "IO_REPARSE_TAG_MOUNT_POINT",
599-
PyLong_FromUnsignedLong(IO_REPARSE_TAG_MOUNT_POINT)) < 0) {
600-
return -1;
598+
if (PyModule_Add(module, "IO_REPARSE_TAG_MOUNT_POINT",
599+
PyLong_FromUnsignedLong(IO_REPARSE_TAG_MOUNT_POINT)) < 0) {
600+
return -1;
601601
}
602-
if (PyModule_AddObject(module, "IO_REPARSE_TAG_APPEXECLINK",
603-
PyLong_FromUnsignedLong(IO_REPARSE_TAG_APPEXECLINK)) < 0) {
604-
return -1;
602+
if (PyModule_Add(module, "IO_REPARSE_TAG_APPEXECLINK",
603+
PyLong_FromUnsignedLong(IO_REPARSE_TAG_APPEXECLINK)) < 0) {
604+
return -1;
605605
}
606606
#endif
607607

Modules/_testinternalcapi.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -1511,13 +1511,13 @@ static PyMethodDef module_functions[] = {
15111511
static int
15121512
module_exec(PyObject *module)
15131513
{
1514-
if (PyModule_AddObject(module, "SIZEOF_PYGC_HEAD",
1515-
PyLong_FromSsize_t(sizeof(PyGC_Head))) < 0) {
1514+
if (PyModule_Add(module, "SIZEOF_PYGC_HEAD",
1515+
PyLong_FromSsize_t(sizeof(PyGC_Head))) < 0) {
15161516
return 1;
15171517
}
15181518

1519-
if (PyModule_AddObject(module, "SIZEOF_TIME_T",
1520-
PyLong_FromSsize_t(sizeof(time_t))) < 0) {
1519+
if (PyModule_Add(module, "SIZEOF_TIME_T",
1520+
PyLong_FromSsize_t(sizeof(time_t))) < 0) {
15211521
return 1;
15221522
}
15231523

Modules/_threadmodule.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -1671,8 +1671,8 @@ thread_module_exec(PyObject *module)
16711671
// Round towards minus infinity
16721672
timeout_max = floor(timeout_max);
16731673

1674-
if (PyModule_AddObject(module, "TIMEOUT_MAX",
1675-
PyFloat_FromDouble(timeout_max)) < 0) {
1674+
if (PyModule_Add(module, "TIMEOUT_MAX",
1675+
PyFloat_FromDouble(timeout_max)) < 0) {
16761676
return -1;
16771677
}
16781678

Modules/cmathmodule.c

+7-8
Original file line numberDiff line numberDiff line change
@@ -1217,30 +1217,29 @@ static PyMethodDef cmath_methods[] = {
12171217
static int
12181218
cmath_exec(PyObject *mod)
12191219
{
1220-
if (PyModule_AddObject(mod, "pi", PyFloat_FromDouble(Py_MATH_PI)) < 0) {
1220+
if (PyModule_Add(mod, "pi", PyFloat_FromDouble(Py_MATH_PI)) < 0) {
12211221
return -1;
12221222
}
1223-
if (PyModule_AddObject(mod, "e", PyFloat_FromDouble(Py_MATH_E)) < 0) {
1223+
if (PyModule_Add(mod, "e", PyFloat_FromDouble(Py_MATH_E)) < 0) {
12241224
return -1;
12251225
}
12261226
// 2pi
1227-
if (PyModule_AddObject(mod, "tau", PyFloat_FromDouble(Py_MATH_TAU)) < 0) {
1227+
if (PyModule_Add(mod, "tau", PyFloat_FromDouble(Py_MATH_TAU)) < 0) {
12281228
return -1;
12291229
}
1230-
if (PyModule_AddObject(mod, "inf", PyFloat_FromDouble(Py_INFINITY)) < 0) {
1230+
if (PyModule_Add(mod, "inf", PyFloat_FromDouble(Py_INFINITY)) < 0) {
12311231
return -1;
12321232
}
12331233

12341234
Py_complex infj = {0.0, Py_INFINITY};
1235-
if (PyModule_AddObject(mod, "infj",
1236-
PyComplex_FromCComplex(infj)) < 0) {
1235+
if (PyModule_Add(mod, "infj", PyComplex_FromCComplex(infj)) < 0) {
12371236
return -1;
12381237
}
1239-
if (PyModule_AddObject(mod, "nan", PyFloat_FromDouble(fabs(Py_NAN))) < 0) {
1238+
if (PyModule_Add(mod, "nan", PyFloat_FromDouble(fabs(Py_NAN))) < 0) {
12401239
return -1;
12411240
}
12421241
Py_complex nanj = {0.0, fabs(Py_NAN)};
1243-
if (PyModule_AddObject(mod, "nanj", PyComplex_FromCComplex(nanj)) < 0) {
1242+
if (PyModule_Add(mod, "nanj", PyComplex_FromCComplex(nanj)) < 0) {
12441243
return -1;
12451244
}
12461245

Modules/mathmodule.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -4037,20 +4037,20 @@ math_exec(PyObject *module)
40374037
if (state->str___trunc__ == NULL) {
40384038
return -1;
40394039
}
4040-
if (PyModule_AddObject(module, "pi", PyFloat_FromDouble(Py_MATH_PI)) < 0) {
4040+
if (PyModule_Add(module, "pi", PyFloat_FromDouble(Py_MATH_PI)) < 0) {
40414041
return -1;
40424042
}
4043-
if (PyModule_AddObject(module, "e", PyFloat_FromDouble(Py_MATH_E)) < 0) {
4043+
if (PyModule_Add(module, "e", PyFloat_FromDouble(Py_MATH_E)) < 0) {
40444044
return -1;
40454045
}
40464046
// 2pi
4047-
if (PyModule_AddObject(module, "tau", PyFloat_FromDouble(Py_MATH_TAU)) < 0) {
4047+
if (PyModule_Add(module, "tau", PyFloat_FromDouble(Py_MATH_TAU)) < 0) {
40484048
return -1;
40494049
}
4050-
if (PyModule_AddObject(module, "inf", PyFloat_FromDouble(Py_INFINITY)) < 0) {
4050+
if (PyModule_Add(module, "inf", PyFloat_FromDouble(Py_INFINITY)) < 0) {
40514051
return -1;
40524052
}
4053-
if (PyModule_AddObject(module, "nan", PyFloat_FromDouble(fabs(Py_NAN))) < 0) {
4053+
if (PyModule_Add(module, "nan", PyFloat_FromDouble(fabs(Py_NAN))) < 0) {
40544054
return -1;
40554055
}
40564056
return 0;

Modules/posixmodule.c

+4-8
Original file line numberDiff line numberDiff line change
@@ -13466,7 +13466,7 @@ setup_confname_table(struct constdef *table, size_t tablesize,
1346613466
}
1346713467
Py_DECREF(o);
1346813468
}
13469-
return PyModule_AddObject(module, tablename, d);
13469+
return PyModule_Add(module, tablename, d);
1347013470
}
1347113471

1347213472
/* Return -1 on failure, 0 on success. */
@@ -16781,11 +16781,9 @@ posixmodule_exec(PyObject *m)
1678116781
#endif
1678216782

1678316783
/* Initialize environ dictionary */
16784-
PyObject *v = convertenviron();
16785-
Py_XINCREF(v);
16786-
if (v == NULL || PyModule_AddObject(m, "environ", v) != 0)
16784+
if (PyModule_Add(m, "environ", convertenviron()) != 0) {
1678716785
return -1;
16788-
Py_DECREF(v);
16786+
}
1678916787

1679016788
if (all_ins(m))
1679116789
return -1;
@@ -16900,9 +16898,7 @@ posixmodule_exec(PyObject *m)
1690016898
Py_DECREF(unicode);
1690116899
}
1690216900

16903-
PyModule_AddObject(m, "_have_functions", list);
16904-
16905-
return 0;
16901+
return PyModule_Add(m, "_have_functions", list);
1690616902
}
1690716903

1690816904

Modules/timemodule.c

+2-5
Original file line numberDiff line numberDiff line change
@@ -1790,11 +1790,9 @@ init_timezone(PyObject *m)
17901790
return -1;
17911791
}
17921792
#endif // MS_WINDOWS
1793-
PyObject *tzname_obj = Py_BuildValue("(NN)", otz0, otz1);
1794-
if (tzname_obj == NULL) {
1793+
if (PyModule_Add(m, "tzname", Py_BuildValue("(NN)", otz0, otz1)) < 0) {
17951794
return -1;
17961795
}
1797-
PyModule_AddObject(m, "tzname", tzname_obj);
17981796
#else // !HAVE_DECL_TZNAME
17991797
static const time_t YEAR = (365 * 24 + 6) * 3600;
18001798
time_t t;
@@ -1837,10 +1835,9 @@ init_timezone(PyObject *m)
18371835
PyModule_AddIntConstant(m, "daylight", janzone != julyzone);
18381836
tzname_obj = Py_BuildValue("(zz)", janname, julyname);
18391837
}
1840-
if (tzname_obj == NULL) {
1838+
if (PyModule_Add(m, "tzname", tzname_obj) < 0) {
18411839
return -1;
18421840
}
1843-
PyModule_AddObject(m, "tzname", tzname_obj);
18441841
#endif // !HAVE_DECL_TZNAME
18451842

18461843
if (PyErr_Occurred()) {

0 commit comments

Comments
 (0)