Issue #28715: Added error checks for PyUnicode_AsUTF8().
This commit is contained in:
commit
e20973926a
|
@ -728,8 +728,7 @@ PyCStructType_setattro(PyObject *self, PyObject *key, PyObject *value)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (value && PyUnicode_Check(key) &&
|
if (value && PyUnicode_Check(key) &&
|
||||||
/* XXX struni _PyUnicode_AsString can fail (also in other places)! */
|
_PyUnicode_EqualToASCIIString(key, "_fields_"))
|
||||||
0 == strcmp(_PyUnicode_AsString(key), "_fields_"))
|
|
||||||
return PyCStructUnionType_update_stgdict(self, value, 1);
|
return PyCStructUnionType_update_stgdict(self, value, 1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -743,7 +742,7 @@ UnionType_setattro(PyObject *self, PyObject *key, PyObject *value)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (PyUnicode_Check(key) &&
|
if (PyUnicode_Check(key) &&
|
||||||
0 == strcmp(_PyUnicode_AsString(key), "_fields_"))
|
_PyUnicode_EqualToASCIIString(key, "_fields_"))
|
||||||
return PyCStructUnionType_update_stgdict(self, value, 0);
|
return PyCStructUnionType_update_stgdict(self, value, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1666,7 +1666,9 @@ POINTER(PyObject *self, PyObject *cls)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if (PyUnicode_CheckExact(cls)) {
|
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);
|
buf = PyMem_Malloc(strlen(name) + 3 + 1);
|
||||||
if (buf == NULL)
|
if (buf == NULL)
|
||||||
return PyErr_NoMemory();
|
return PyErr_NoMemory();
|
||||||
|
|
|
@ -929,11 +929,14 @@ static PyMethodDef oss_mixer_methods[] = {
|
||||||
static PyObject *
|
static PyObject *
|
||||||
oss_getattro(oss_audio_t *self, PyObject *nameobj)
|
oss_getattro(oss_audio_t *self, PyObject *nameobj)
|
||||||
{
|
{
|
||||||
char *name = "";
|
const char *name = "";
|
||||||
PyObject * rval = NULL;
|
PyObject * rval = NULL;
|
||||||
|
|
||||||
if (PyUnicode_Check(nameobj))
|
if (PyUnicode_Check(nameobj)) {
|
||||||
name = _PyUnicode_AsString(nameobj);
|
name = PyUnicode_AsUTF8(nameobj);
|
||||||
|
if (name == NULL)
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp(name, "closed") == 0) {
|
if (strcmp(name, "closed") == 0) {
|
||||||
rval = (self->fd == -1) ? Py_True : Py_False;
|
rval = (self->fd == -1) ? Py_True : Py_False;
|
||||||
|
|
|
@ -2118,17 +2118,19 @@ ast_for_atom(struct compiling *c, const node *n)
|
||||||
errtype = "value error";
|
errtype = "value error";
|
||||||
if (errtype) {
|
if (errtype) {
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
const char *s = NULL;
|
||||||
PyObject *type, *value, *tback, *errstr;
|
PyObject *type, *value, *tback, *errstr;
|
||||||
PyErr_Fetch(&type, &value, &tback);
|
PyErr_Fetch(&type, &value, &tback);
|
||||||
errstr = PyObject_Str(value);
|
errstr = PyObject_Str(value);
|
||||||
if (errstr) {
|
if (errstr)
|
||||||
char *s = _PyUnicode_AsString(errstr);
|
s = PyUnicode_AsUTF8(errstr);
|
||||||
|
if (s) {
|
||||||
PyOS_snprintf(buf, sizeof(buf), "(%s) %s", errtype, s);
|
PyOS_snprintf(buf, sizeof(buf), "(%s) %s", errtype, s);
|
||||||
Py_DECREF(errstr);
|
|
||||||
} else {
|
} else {
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
PyOS_snprintf(buf, sizeof(buf), "(%s) unknown error", errtype);
|
PyOS_snprintf(buf, sizeof(buf), "(%s) unknown error", errtype);
|
||||||
}
|
}
|
||||||
|
Py_XDECREF(errstr);
|
||||||
ast_error(c, n, buf);
|
ast_error(c, n, buf);
|
||||||
Py_DECREF(type);
|
Py_DECREF(type);
|
||||||
Py_XDECREF(value);
|
Py_XDECREF(value);
|
||||||
|
|
|
@ -147,6 +147,10 @@ _PyImport_LoadDynamicModuleWithSpec(PyObject *spec, FILE *fp)
|
||||||
/* Package context is needed for single-phase init */
|
/* Package context is needed for single-phase init */
|
||||||
oldcontext = _Py_PackageContext;
|
oldcontext = _Py_PackageContext;
|
||||||
_Py_PackageContext = PyUnicode_AsUTF8(name_unicode);
|
_Py_PackageContext = PyUnicode_AsUTF8(name_unicode);
|
||||||
|
if (_Py_PackageContext == NULL) {
|
||||||
|
_Py_PackageContext = oldcontext;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
m = p0();
|
m = p0();
|
||||||
_Py_PackageContext = oldcontext;
|
_Py_PackageContext = oldcontext;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue