[lxc-devel] [PATCH] python: Make the code compatibly with 3.2

Serge Hallyn serge.hallyn at ubuntu.com
Wed Apr 24 16:40:32 UTC 2013


Quoting Stéphane Graber (stgraber at ubuntu.com):
> 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>

Acked-by: Serge E. Hallyn <serge.hallyn 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
> 
> 
> ------------------------------------------------------------------------------
> Try New Relic Now & We'll Send You this Cool Shirt
> New Relic is the only SaaS-based application performance monitoring service 
> that delivers powerful full stack analytics. Optimize and monitor your
> browser, app, & servers with just a few lines of code. Try New Relic
> and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr
> _______________________________________________
> Lxc-devel mailing list
> Lxc-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/lxc-devel




More information about the lxc-devel mailing list