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