Correctly handle exceptions with non-ascii chars in the message

Previous implementation would have barfed in canse of non-utf-8 data in
the message.
This commit is contained in:
Daniele Varrazzo 2011-02-19 14:13:32 +00:00
parent d263ecfee7
commit 8a08114314

View File

@ -593,14 +593,27 @@ psyco_set_error(PyObject *exc, PyObject *curs, const char *msg,
const char *pgerror, const char *pgcode)
{
PyObject *t;
PyObject *pymsg;
PyObject *err = NULL;
connectionObject *conn = NULL;
PyObject *err = PyObject_CallFunction(exc, "s", msg);
if (curs) {
conn = ((cursorObject *)curs)->conn;
}
if ((pymsg = conn_text_from_chars(conn, msg))) {
err = PyObject_CallFunctionObjArgs(exc, pymsg, NULL);
Py_DECREF(pymsg);
}
else {
/* what's better than an error in an error handler in the morning?
* Anyway, some error was set, refcount is ok... get outta here. */
return;
}
if (err) {
connectionObject *conn = NULL;
if (curs) {
PyObject_SetAttrString(err, "cursor", curs);
conn = ((cursorObject *)curs)->conn;
}
if (pgerror) {