bpo-35454: Fix miscellaneous minor issues in error handling. (#11077)
* bpo-35454: Fix miscellaneous minor issues in error handling. * Fix a null pointer dereference.
This commit is contained in:
parent
bb86bf4c4e
commit
8905fcc85a
|
@ -352,7 +352,10 @@ get_attrib_from_keywords(PyObject *kwds)
|
|||
return NULL;
|
||||
}
|
||||
attrib = PyDict_Copy(attrib);
|
||||
PyDict_DelItem(kwds, attrib_str);
|
||||
if (attrib && PyDict_DelItem(kwds, attrib_str) < 0) {
|
||||
Py_DECREF(attrib);
|
||||
attrib = NULL;
|
||||
}
|
||||
} else {
|
||||
attrib = PyDict_New();
|
||||
}
|
||||
|
|
|
@ -777,9 +777,11 @@ local_clear(localobject *self)
|
|||
for(tstate = PyInterpreterState_ThreadHead(tstate->interp);
|
||||
tstate;
|
||||
tstate = PyThreadState_Next(tstate))
|
||||
if (tstate->dict &&
|
||||
PyDict_GetItem(tstate->dict, self->key))
|
||||
PyDict_DelItem(tstate->dict, self->key);
|
||||
if (tstate->dict && PyDict_GetItem(tstate->dict, self->key)) {
|
||||
if (PyDict_DelItem(tstate->dict, self->key)) {
|
||||
PyErr_Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -362,10 +362,14 @@ remove_unusable_flags(PyObject *m)
|
|||
else {
|
||||
if (PyDict_GetItemString(
|
||||
dict,
|
||||
win_runtime_flags[i].flag_name) != NULL) {
|
||||
PyDict_DelItemString(
|
||||
dict,
|
||||
win_runtime_flags[i].flag_name);
|
||||
win_runtime_flags[i].flag_name) != NULL)
|
||||
{
|
||||
if (PyDict_DelItemString(
|
||||
dict,
|
||||
win_runtime_flags[i].flag_name))
|
||||
{
|
||||
PyErr_Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -103,15 +103,15 @@ namespace_repr(PyObject *ns)
|
|||
PyObject *value, *item;
|
||||
|
||||
value = PyDict_GetItem(d, key);
|
||||
assert(value != NULL);
|
||||
|
||||
item = PyUnicode_FromFormat("%S=%R", key, value);
|
||||
if (item == NULL) {
|
||||
loop_error = 1;
|
||||
}
|
||||
else {
|
||||
loop_error = PyList_Append(pairs, item);
|
||||
Py_DECREF(item);
|
||||
if (value != NULL) {
|
||||
item = PyUnicode_FromFormat("%S=%R", key, value);
|
||||
if (item == NULL) {
|
||||
loop_error = 1;
|
||||
}
|
||||
else {
|
||||
loop_error = PyList_Append(pairs, item);
|
||||
Py_DECREF(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -255,7 +255,11 @@ already_warned(PyObject *registry, PyObject *key, int should_set)
|
|||
version_obj = _PyDict_GetItemId(registry, &PyId_version);
|
||||
if (version_obj == NULL
|
||||
|| !PyLong_CheckExact(version_obj)
|
||||
|| PyLong_AsLong(version_obj) != _PyRuntime.warnings.filters_version) {
|
||||
|| PyLong_AsLong(version_obj) != _PyRuntime.warnings.filters_version)
|
||||
{
|
||||
if (PyErr_Occurred()) {
|
||||
return -1;
|
||||
}
|
||||
PyDict_Clear(registry);
|
||||
version_obj = PyLong_FromLong(_PyRuntime.warnings.filters_version);
|
||||
if (version_obj == NULL)
|
||||
|
|
|
@ -5109,7 +5109,7 @@ unicode_concatenate(PyObject *v, PyObject *w,
|
|||
PyObject *names = f->f_code->co_names;
|
||||
PyObject *name = GETITEM(names, oparg);
|
||||
PyObject *locals = f->f_locals;
|
||||
if (PyDict_CheckExact(locals) &&
|
||||
if (locals && PyDict_CheckExact(locals) &&
|
||||
PyDict_GetItem(locals, name) == v) {
|
||||
if (PyDict_DelItem(locals, name) != 0) {
|
||||
PyErr_Clear();
|
||||
|
|
|
@ -129,8 +129,10 @@ PyObject *_PyCodec_Lookup(const char *encoding)
|
|||
|
||||
/* Next, scan the search functions in order of registration */
|
||||
args = PyTuple_New(1);
|
||||
if (args == NULL)
|
||||
goto onError;
|
||||
if (args == NULL) {
|
||||
Py_DECREF(v);
|
||||
return NULL;
|
||||
}
|
||||
PyTuple_SET_ITEM(args,0,v);
|
||||
|
||||
len = PyList_Size(interp->codec_search_path);
|
||||
|
|
|
@ -2143,10 +2143,10 @@ _imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file)
|
|||
}
|
||||
|
||||
mod = _PyImport_FindExtensionObject(name, path);
|
||||
if (mod != NULL) {
|
||||
if (mod != NULL || PyErr_Occurred()) {
|
||||
Py_DECREF(name);
|
||||
Py_DECREF(path);
|
||||
Py_INCREF(mod);
|
||||
Py_XINCREF(mod);
|
||||
return mod;
|
||||
}
|
||||
|
||||
|
|
|
@ -1286,6 +1286,9 @@ new_interpreter(PyThreadState **tstate_p)
|
|||
PyDict_SetItemString(interp->sysdict, "modules", modules);
|
||||
_PySys_EndInit(interp->sysdict, interp);
|
||||
}
|
||||
else if (PyErr_Occurred()) {
|
||||
goto handle_error;
|
||||
}
|
||||
|
||||
bimod = _PyImport_FindBuiltin("builtins", modules);
|
||||
if (bimod != NULL) {
|
||||
|
@ -1294,6 +1297,9 @@ new_interpreter(PyThreadState **tstate_p)
|
|||
goto handle_error;
|
||||
Py_INCREF(interp->builtins);
|
||||
}
|
||||
else if (PyErr_Occurred()) {
|
||||
goto handle_error;
|
||||
}
|
||||
|
||||
/* initialize builtin exceptions */
|
||||
_PyExc_Init(bimod);
|
||||
|
|
Loading…
Reference in New Issue