Message ID | 20230126051310.4149074-1-marmarek@invisiblethingslab.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | tools/python: change 's#' size type for Python >= 3.10 | expand |
On 26.01.2023 06:13, Marek Marczykowski-Górecki wrote: > @@ -1774,7 +1775,7 @@ static PyObject *pyflask_load(PyObject *self, PyObject *args, PyObject *kwds) > { > xc_interface *xc_handle; > char *policy; > - uint32_t len; > + Py_ssize_t len; I find this suspicious - by the name, this is a signed type when an unsigned one was used here before (and properly, imo). Irrespective of the remark of course I'll leave acking (or not) of this to people knowing Python better than I do. Jan
On Thu, Jan 26, 2023 at 10:14:54AM +0100, Jan Beulich wrote: > On 26.01.2023 06:13, Marek Marczykowski-Górecki wrote: > > @@ -1774,7 +1775,7 @@ static PyObject *pyflask_load(PyObject *self, PyObject *args, PyObject *kwds) > > { > > xc_interface *xc_handle; > > char *policy; > > - uint32_t len; > > + Py_ssize_t len; > > I find this suspicious - by the name, this is a signed type when an > unsigned one was used here before (and properly, imo). It is suspicious indeed, but correct according to the documentation: https://docs.python.org/3/c-api/arg.html#strings-and-buffers > Irrespective of the remark of course I'll leave acking (or not) of this > to people knowing Python better than I do. > > Jan
On Thu, Jan 26, 2023 at 06:13:10AM +0100, Marek Marczykowski-Górecki wrote: > Python < 3.10 by default uses 'int' type for data+size string types > (s#), unless PY_SSIZE_T_CLEAN is defined - in which case it uses > Py_ssize_t. The former behavior was removed in Python 3.10 and now it's > required to define PY_SSIZE_T_CLEAN before including Python.h, and using > Py_ssize_t for the length argument. The PY_SSIZE_T_CLEAN behavior is > supported since Python 2.5. > > Adjust bindings accordingly. > > Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com> Thanks,
diff --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c index fd008610329b..cfb2734a992b 100644 --- a/tools/python/xen/lowlevel/xc/xc.c +++ b/tools/python/xen/lowlevel/xc/xc.c @@ -4,6 +4,7 @@ * Copyright (c) 2003-2004, K A Fraser (University of Cambridge) */ +#define PY_SSIZE_T_CLEAN #include <Python.h> #define XC_WANT_COMPAT_MAP_FOREIGN_API #include <xenctrl.h> @@ -1774,7 +1775,7 @@ static PyObject *pyflask_load(PyObject *self, PyObject *args, PyObject *kwds) { xc_interface *xc_handle; char *policy; - uint32_t len; + Py_ssize_t len; int ret; static char *kwd_list[] = { "policy", NULL }; diff --git a/tools/python/xen/lowlevel/xs/xs.c b/tools/python/xen/lowlevel/xs/xs.c index 0dad7fa5f2fc..3ba5a8b893d9 100644 --- a/tools/python/xen/lowlevel/xs/xs.c +++ b/tools/python/xen/lowlevel/xs/xs.c @@ -18,6 +18,7 @@ * Copyright (C) 2005 XenSource Ltd. */ +#define PY_SSIZE_T_CLEAN #include <Python.h> #include <stdbool.h> @@ -141,7 +142,7 @@ static PyObject *xspy_write(XsHandle *self, PyObject *args) char *thstr; char *path; char *data; - int data_n; + Py_ssize_t data_n; bool result; if (!xh)
Python < 3.10 by default uses 'int' type for data+size string types (s#), unless PY_SSIZE_T_CLEAN is defined - in which case it uses Py_ssize_t. The former behavior was removed in Python 3.10 and now it's required to define PY_SSIZE_T_CLEAN before including Python.h, and using Py_ssize_t for the length argument. The PY_SSIZE_T_CLEAN behavior is supported since Python 2.5. Adjust bindings accordingly. Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> --- tools/python/xen/lowlevel/xc/xc.c | 3 ++- tools/python/xen/lowlevel/xs/xs.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-)