[lxc-devel] [PATCH] python: Make the code compatibly with 3.2
Stéphane Graber
stgraber at ubuntu.com
Wed Apr 24 15:34:03 UTC 2013
The previous change used some 3.3-specific functions.
We still support 3.2 so revert to 3.2-compatible calls.
Reported-by: S.Çağlar Onur <caglar at 10ur.org>
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
src/python-lxc/lxc.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/python-lxc/lxc.c b/src/python-lxc/lxc.c
index 85710d6..4e9fde7 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;
--
1.8.1.2
More information about the lxc-devel
mailing list