mirror of https://github.com/python/cpython
Issue #6697: Check that _PyUnicode_AsString() result is not NULL in typeobject
Type name and slots are already checked for surrogates somewhere else, but it's better to ensure that the result is not NULL.
This commit is contained in:
parent
8699950b04
commit
e5f99f398c
|
@ -1347,8 +1347,14 @@ consistent method resolution\norder (MRO) for bases");
|
||||||
i = 0;
|
i = 0;
|
||||||
while (PyDict_Next(set, &i, &k, &v) && (size_t)off < sizeof(buf)) {
|
while (PyDict_Next(set, &i, &k, &v) && (size_t)off < sizeof(buf)) {
|
||||||
PyObject *name = class_name(k);
|
PyObject *name = class_name(k);
|
||||||
off += PyOS_snprintf(buf + off, sizeof(buf) - off, " %s",
|
char *name_str;
|
||||||
name ? _PyUnicode_AsString(name) : "?");
|
if (name != NULL) {
|
||||||
|
name_str = _PyUnicode_AsString(name);
|
||||||
|
if (name_str == NULL)
|
||||||
|
name_str = "?"
|
||||||
|
} else
|
||||||
|
name_str = "?"
|
||||||
|
off += PyOS_snprintf(buf + off, sizeof(buf) - off, " %s", name_str);
|
||||||
Py_XDECREF(name);
|
Py_XDECREF(name);
|
||||||
if (--n && (size_t)(off+1) < sizeof(buf)) {
|
if (--n && (size_t)(off+1) < sizeof(buf)) {
|
||||||
buf[off++] = ',';
|
buf[off++] = ',';
|
||||||
|
@ -2220,6 +2226,10 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
|
||||||
for (i = 0; i < nslots; i++, mp++) {
|
for (i = 0; i < nslots; i++, mp++) {
|
||||||
mp->name = _PyUnicode_AsString(
|
mp->name = _PyUnicode_AsString(
|
||||||
PyTuple_GET_ITEM(slots, i));
|
PyTuple_GET_ITEM(slots, i));
|
||||||
|
if (mp->name == NULL) {
|
||||||
|
Py_DECREF(type);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
mp->type = T_OBJECT_EX;
|
mp->type = T_OBJECT_EX;
|
||||||
mp->offset = slotoffset;
|
mp->offset = slotoffset;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue