[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