diff --git a/src/python-lxc/lxc.c b/src/python-lxc/lxc.c index 85710d642..4e9fde7ed 100644 --- a/src/python-lxc/lxc.c +++ b/src/python-lxc/lxc.c @@ -49,18 +49,27 @@ convert_tuple_to_char_pointer_array(PyObject *argv) { assert(pyobj != NULL); char *str = NULL; + PyObject *pystr = NULL; if (!PyUnicode_Check(pyobj)) { PyErr_SetString(PyExc_ValueError, "Expected a string"); goto error; } - str = PyUnicode_AsUTF8(pyobj); - if (!str) { + pystr = PyUnicode_AsUTF8String(pyobj); + if (!pystr) { /* Maybe it wasn't UTF-8 encoded. An exception is already set. */ goto error; } + str = PyBytes_AsString(pystr); + if (!str) { + /* Maybe pystr wasn't a valid object. An exception is already set. + */ + Py_DECREF(pystr); + goto error; + } + /* We must make a copy of str, because it points into internal memory * which we do not own. Assume it's NULL terminated, otherwise we'd * have to use PyUnicode_AsUTF8AndSize() and be explicit about copying @@ -71,6 +80,7 @@ convert_tuple_to_char_pointer_array(PyObject *argv) { /* Do not decref pyobj since we stole a reference by using * PyTuple_GET_ITEM(). */ + Py_DECREF(pystr); if (result[i] == NULL) { PyErr_SetNone(PyExc_MemoryError); goto error;