Issue #28715: Added error checks for PyUnicode_AsUTF8().

This commit is contained in:
Serhiy Storchaka 2016-11-20 08:47:21 +02:00
parent 93ff8725b3
commit 144f77a981
5 changed files with 20 additions and 10 deletions

View file

@ -734,8 +734,7 @@ PyCStructType_setattro(PyObject *self, PyObject *key, PyObject *value)
return -1;
if (value && PyUnicode_Check(key) &&
/* XXX struni _PyUnicode_AsString can fail (also in other places)! */
0 == strcmp(_PyUnicode_AsString(key), "_fields_"))
_PyUnicode_EqualToASCIIString(key, "_fields_"))
return PyCStructUnionType_update_stgdict(self, value, 1);
return 0;
}
@ -749,7 +748,7 @@ UnionType_setattro(PyObject *self, PyObject *key, PyObject *value)
return -1;
if (PyUnicode_Check(key) &&
0 == strcmp(_PyUnicode_AsString(key), "_fields_"))
_PyUnicode_EqualToASCIIString(key, "_fields_"))
return PyCStructUnionType_update_stgdict(self, value, 0);
return 0;
}

View file

@ -1670,7 +1670,9 @@ POINTER(PyObject *self, PyObject *cls)
return result;
}
if (PyUnicode_CheckExact(cls)) {
char *name = _PyUnicode_AsString(cls);
const char *name = PyUnicode_AsUTF8(cls);
if (name == NULL)
return NULL;
buf = PyMem_Malloc(strlen(name) + 3 + 1);
if (buf == NULL)
return PyErr_NoMemory();

View file

@ -925,11 +925,14 @@ static PyMethodDef oss_mixer_methods[] = {
static PyObject *
oss_getattro(oss_audio_t *self, PyObject *nameobj)
{
char *name = "";
const char *name = "";
PyObject * rval = NULL;
if (PyUnicode_Check(nameobj))
name = _PyUnicode_AsString(nameobj);
if (PyUnicode_Check(nameobj)) {
name = PyUnicode_AsUTF8(nameobj);
if (name == NULL)
return NULL;
}
if (strcmp(name, "closed") == 0) {
rval = (self->fd == -1) ? Py_True : Py_False;