mirror of https://github.com/python/cpython
gh-86493: Fix possible leaks in modules initialization: _curses_panel, _decimal, posix, xxsubtype (GH-106767)
This commit is contained in:
parent
e1c295e3da
commit
745492355b
|
@ -662,8 +662,7 @@ _curses_panel_exec(PyObject *mod)
|
||||||
state->PyCursesError = PyErr_NewException(
|
state->PyCursesError = PyErr_NewException(
|
||||||
"_curses_panel.error", NULL, NULL);
|
"_curses_panel.error", NULL, NULL);
|
||||||
|
|
||||||
if (PyModule_AddObject(mod, "error", Py_NewRef(state->PyCursesError)) < 0) {
|
if (PyModule_AddObjectRef(mod, "error", state->PyCursesError) < 0) {
|
||||||
Py_DECREF(state->PyCursesError);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5957,7 +5957,7 @@ PyInit__decimal(void)
|
||||||
Py_DECREF(base);
|
Py_DECREF(base);
|
||||||
|
|
||||||
/* add to module */
|
/* add to module */
|
||||||
CHECK_INT(PyModule_AddObject(m, cm->name, Py_NewRef(cm->ex)));
|
CHECK_INT(PyModule_AddObjectRef(m, cm->name, cm->ex));
|
||||||
|
|
||||||
/* add to signal tuple */
|
/* add to signal tuple */
|
||||||
PyTuple_SET_ITEM(state->SignalTuple, i, Py_NewRef(cm->ex));
|
PyTuple_SET_ITEM(state->SignalTuple, i, Py_NewRef(cm->ex));
|
||||||
|
@ -5986,39 +5986,39 @@ PyInit__decimal(void)
|
||||||
ASSIGN_PTR(cm->ex, PyErr_NewException(cm->fqname, base, NULL));
|
ASSIGN_PTR(cm->ex, PyErr_NewException(cm->fqname, base, NULL));
|
||||||
Py_DECREF(base);
|
Py_DECREF(base);
|
||||||
|
|
||||||
CHECK_INT(PyModule_AddObject(m, cm->name, Py_NewRef(cm->ex)));
|
CHECK_INT(PyModule_AddObjectRef(m, cm->name, cm->ex));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Init default context template first */
|
/* Init default context template first */
|
||||||
ASSIGN_PTR(state->default_context_template,
|
ASSIGN_PTR(state->default_context_template,
|
||||||
PyObject_CallObject((PyObject *)state->PyDecContext_Type, NULL));
|
PyObject_CallObject((PyObject *)state->PyDecContext_Type, NULL));
|
||||||
CHECK_INT(PyModule_AddObject(m, "DefaultContext",
|
CHECK_INT(PyModule_AddObjectRef(m, "DefaultContext",
|
||||||
Py_NewRef(state->default_context_template)));
|
state->default_context_template));
|
||||||
|
|
||||||
#ifndef WITH_DECIMAL_CONTEXTVAR
|
#ifndef WITH_DECIMAL_CONTEXTVAR
|
||||||
ASSIGN_PTR(state->tls_context_key,
|
ASSIGN_PTR(state->tls_context_key,
|
||||||
PyUnicode_FromString("___DECIMAL_CTX__"));
|
PyUnicode_FromString("___DECIMAL_CTX__"));
|
||||||
CHECK_INT(PyModule_AddObject(m, "HAVE_CONTEXTVAR", Py_NewRef(Py_False)));
|
CHECK_INT(PyModule_AddObjectRef(m, "HAVE_CONTEXTVAR", Py_False));
|
||||||
#else
|
#else
|
||||||
ASSIGN_PTR(state->current_context_var, PyContextVar_New("decimal_context", NULL));
|
ASSIGN_PTR(state->current_context_var, PyContextVar_New("decimal_context", NULL));
|
||||||
CHECK_INT(PyModule_AddObject(m, "HAVE_CONTEXTVAR", Py_NewRef(Py_True)));
|
CHECK_INT(PyModule_AddObjectRef(m, "HAVE_CONTEXTVAR", Py_True));
|
||||||
#endif
|
#endif
|
||||||
CHECK_INT(PyModule_AddObject(m, "HAVE_THREADS", Py_NewRef(Py_True)));
|
CHECK_INT(PyModule_AddObjectRef(m, "HAVE_THREADS", Py_True));
|
||||||
|
|
||||||
/* Init basic context template */
|
/* Init basic context template */
|
||||||
ASSIGN_PTR(state->basic_context_template,
|
ASSIGN_PTR(state->basic_context_template,
|
||||||
PyObject_CallObject((PyObject *)state->PyDecContext_Type, NULL));
|
PyObject_CallObject((PyObject *)state->PyDecContext_Type, NULL));
|
||||||
init_basic_context(state->basic_context_template);
|
init_basic_context(state->basic_context_template);
|
||||||
CHECK_INT(PyModule_AddObject(m, "BasicContext",
|
CHECK_INT(PyModule_AddObjectRef(m, "BasicContext",
|
||||||
Py_NewRef(state->basic_context_template)));
|
state->basic_context_template));
|
||||||
|
|
||||||
/* Init extended context template */
|
/* Init extended context template */
|
||||||
ASSIGN_PTR(state->extended_context_template,
|
ASSIGN_PTR(state->extended_context_template,
|
||||||
PyObject_CallObject((PyObject *)state->PyDecContext_Type, NULL));
|
PyObject_CallObject((PyObject *)state->PyDecContext_Type, NULL));
|
||||||
init_extended_context(state->extended_context_template);
|
init_extended_context(state->extended_context_template);
|
||||||
CHECK_INT(PyModule_AddObject(m, "ExtendedContext",
|
CHECK_INT(PyModule_AddObjectRef(m, "ExtendedContext",
|
||||||
Py_NewRef(state->extended_context_template)));
|
state->extended_context_template));
|
||||||
|
|
||||||
|
|
||||||
/* Init mpd_ssize_t constants */
|
/* Init mpd_ssize_t constants */
|
||||||
|
@ -6037,7 +6037,7 @@ PyInit__decimal(void)
|
||||||
/* Init string constants */
|
/* Init string constants */
|
||||||
for (i = 0; i < _PY_DEC_ROUND_GUARD; i++) {
|
for (i = 0; i < _PY_DEC_ROUND_GUARD; i++) {
|
||||||
ASSIGN_PTR(state->round_map[i], PyUnicode_InternFromString(mpd_round_string[i]));
|
ASSIGN_PTR(state->round_map[i], PyUnicode_InternFromString(mpd_round_string[i]));
|
||||||
CHECK_INT(PyModule_AddObject(m, mpd_round_string[i], Py_NewRef(state->round_map[i])));
|
CHECK_INT(PyModule_AddObjectRef(m, mpd_round_string[i], state->round_map[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add specification version number */
|
/* Add specification version number */
|
||||||
|
|
|
@ -16793,57 +16793,49 @@ posixmodule_exec(PyObject *m)
|
||||||
if (setup_confname_tables(m))
|
if (setup_confname_tables(m))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
PyModule_AddObject(m, "error", Py_NewRef(PyExc_OSError));
|
if (PyModule_AddObjectRef(m, "error", PyExc_OSError) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(HAVE_WAITID) && !defined(__APPLE__)
|
#if defined(HAVE_WAITID) && !defined(__APPLE__)
|
||||||
waitid_result_desc.name = MODNAME ".waitid_result";
|
waitid_result_desc.name = MODNAME ".waitid_result";
|
||||||
PyObject *WaitidResultType = (PyObject *)PyStructSequence_NewType(&waitid_result_desc);
|
state->WaitidResultType = (PyObject *)PyStructSequence_NewType(&waitid_result_desc);
|
||||||
if (WaitidResultType == NULL) {
|
if (PyModule_AddObjectRef(m, "waitid_result", state->WaitidResultType) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
PyModule_AddObject(m, "waitid_result", Py_NewRef(WaitidResultType));
|
|
||||||
state->WaitidResultType = WaitidResultType;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
stat_result_desc.name = "os.stat_result"; /* see issue #19209 */
|
stat_result_desc.name = "os.stat_result"; /* see issue #19209 */
|
||||||
stat_result_desc.fields[7].name = PyStructSequence_UnnamedField;
|
stat_result_desc.fields[7].name = PyStructSequence_UnnamedField;
|
||||||
stat_result_desc.fields[8].name = PyStructSequence_UnnamedField;
|
stat_result_desc.fields[8].name = PyStructSequence_UnnamedField;
|
||||||
stat_result_desc.fields[9].name = PyStructSequence_UnnamedField;
|
stat_result_desc.fields[9].name = PyStructSequence_UnnamedField;
|
||||||
PyObject *StatResultType = (PyObject *)PyStructSequence_NewType(&stat_result_desc);
|
state->StatResultType = (PyObject *)PyStructSequence_NewType(&stat_result_desc);
|
||||||
if (StatResultType == NULL) {
|
if (PyModule_AddObjectRef(m, "stat_result", state->StatResultType) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
PyModule_AddObject(m, "stat_result", Py_NewRef(StatResultType));
|
state->statresult_new_orig = ((PyTypeObject *)state->StatResultType)->tp_new;
|
||||||
state->StatResultType = StatResultType;
|
((PyTypeObject *)state->StatResultType)->tp_new = statresult_new;
|
||||||
state->statresult_new_orig = ((PyTypeObject *)StatResultType)->tp_new;
|
|
||||||
((PyTypeObject *)StatResultType)->tp_new = statresult_new;
|
|
||||||
|
|
||||||
statvfs_result_desc.name = "os.statvfs_result"; /* see issue #19209 */
|
statvfs_result_desc.name = "os.statvfs_result"; /* see issue #19209 */
|
||||||
PyObject *StatVFSResultType = (PyObject *)PyStructSequence_NewType(&statvfs_result_desc);
|
state->StatVFSResultType = (PyObject *)PyStructSequence_NewType(&statvfs_result_desc);
|
||||||
if (StatVFSResultType == NULL) {
|
if (PyModule_AddObjectRef(m, "statvfs_result", state->StatVFSResultType) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
PyModule_AddObject(m, "statvfs_result", Py_NewRef(StatVFSResultType));
|
|
||||||
state->StatVFSResultType = StatVFSResultType;
|
|
||||||
|
|
||||||
#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)
|
#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)
|
||||||
sched_param_desc.name = MODNAME ".sched_param";
|
sched_param_desc.name = MODNAME ".sched_param";
|
||||||
PyObject *SchedParamType = (PyObject *)PyStructSequence_NewType(&sched_param_desc);
|
state->SchedParamType = (PyObject *)PyStructSequence_NewType(&sched_param_desc);
|
||||||
if (SchedParamType == NULL) {
|
if (PyModule_AddObjectRef(m, "sched_param", state->SchedParamType) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
PyModule_AddObject(m, "sched_param", Py_NewRef(SchedParamType));
|
((PyTypeObject *)state->SchedParamType)->tp_new = os_sched_param;
|
||||||
state->SchedParamType = SchedParamType;
|
|
||||||
((PyTypeObject *)SchedParamType)->tp_new = os_sched_param;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* initialize TerminalSize_info */
|
/* initialize TerminalSize_info */
|
||||||
PyObject *TerminalSizeType = (PyObject *)PyStructSequence_NewType(&TerminalSize_desc);
|
state->TerminalSizeType = (PyObject *)PyStructSequence_NewType(&TerminalSize_desc);
|
||||||
if (TerminalSizeType == NULL) {
|
if (PyModule_AddObjectRef(m, "terminal_size", state->TerminalSizeType) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
PyModule_AddObject(m, "terminal_size", Py_NewRef(TerminalSizeType));
|
|
||||||
state->TerminalSizeType = TerminalSizeType;
|
|
||||||
|
|
||||||
/* initialize scandir types */
|
/* initialize scandir types */
|
||||||
PyObject *ScandirIteratorType = PyType_FromModuleAndSpec(m, &ScandirIteratorType_spec, NULL);
|
PyObject *ScandirIteratorType = PyType_FromModuleAndSpec(m, &ScandirIteratorType_spec, NULL);
|
||||||
|
@ -16852,28 +16844,21 @@ posixmodule_exec(PyObject *m)
|
||||||
}
|
}
|
||||||
state->ScandirIteratorType = ScandirIteratorType;
|
state->ScandirIteratorType = ScandirIteratorType;
|
||||||
|
|
||||||
PyObject *DirEntryType = PyType_FromModuleAndSpec(m, &DirEntryType_spec, NULL);
|
state->DirEntryType = PyType_FromModuleAndSpec(m, &DirEntryType_spec, NULL);
|
||||||
if (DirEntryType == NULL) {
|
if (PyModule_AddObjectRef(m, "DirEntry", state->DirEntryType) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
PyModule_AddObject(m, "DirEntry", Py_NewRef(DirEntryType));
|
|
||||||
state->DirEntryType = DirEntryType;
|
|
||||||
|
|
||||||
times_result_desc.name = MODNAME ".times_result";
|
times_result_desc.name = MODNAME ".times_result";
|
||||||
PyObject *TimesResultType = (PyObject *)PyStructSequence_NewType(×_result_desc);
|
state->TimesResultType = (PyObject *)PyStructSequence_NewType(×_result_desc);
|
||||||
if (TimesResultType == NULL) {
|
if (PyModule_AddObjectRef(m, "times_result", state->TimesResultType) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
PyModule_AddObject(m, "times_result", Py_NewRef(TimesResultType));
|
|
||||||
state->TimesResultType = TimesResultType;
|
|
||||||
|
|
||||||
PyTypeObject *UnameResultType = PyStructSequence_NewType(&uname_result_desc);
|
state->UnameResultType = (PyObject *)PyStructSequence_NewType(&uname_result_desc);
|
||||||
if (UnameResultType == NULL) {
|
if (PyModule_AddObjectRef(m, "uname_result", state->UnameResultType) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
;
|
|
||||||
PyModule_AddObject(m, "uname_result", Py_NewRef(UnameResultType));
|
|
||||||
state->UnameResultType = (PyObject *)UnameResultType;
|
|
||||||
|
|
||||||
if ((state->billion = PyLong_FromLong(1000000000)) == NULL)
|
if ((state->billion = PyLong_FromLong(1000000000)) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -274,12 +274,10 @@ xxsubtype_exec(PyObject* m)
|
||||||
if (PyType_Ready(&spamdict_type) < 0)
|
if (PyType_Ready(&spamdict_type) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (PyModule_AddObject(m, "spamlist",
|
if (PyModule_AddObjectRef(m, "spamlist", (PyObject *)&spamlist_type) < 0)
|
||||||
Py_NewRef(&spamlist_type)) < 0)
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (PyModule_AddObject(m, "spamdict",
|
if (PyModule_AddObjectRef(m, "spamdict", (PyObject *)&spamdict_type) < 0)
|
||||||
Py_NewRef(&spamdict_type)) < 0)
|
|
||||||
return -1;
|
return -1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue