From a3cf19e62ab43f1ec62cbfb6af5f0aec768935c5 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 15 Nov 2006 19:40:00 +0000 Subject: [PATCH] Fix unsigned long wraparound in python binding --- ChangeLog | 6 ++++++ python/libvir.c | 4 ++-- python/libvirt_wrap.h | 1 + python/types.c | 12 ++++++++++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0084b239d9..7c17c5d6b4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Wed Nov 15 15:42:01 EST 2006 Daniel Berrange + + * python/libvir.c, python/libvirt_wrap.h, python/types.h: Ensure + that unsigned longs are marshalled to python Long type instead + of Int, to avoid 32-bit integer wraparound + Tue Nov 14 18:42:01 EST 2006 Daniel Berrange * src/xend_internal.c: Added support for parsing non-bridge style diff --git a/python/libvir.c b/python/libvir.c index a7b98dc000..6d14fb2fe8 100644 --- a/python/libvir.c +++ b/python/libvir.c @@ -261,8 +261,8 @@ libvirt_virDomainGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { } py_retval = PyList_New(5); PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.state)); - PyList_SetItem(py_retval, 1, libvirt_longWrap((long) info.maxMem)); - PyList_SetItem(py_retval, 2, libvirt_longWrap((long) info.memory)); + PyList_SetItem(py_retval, 1, libvirt_ulongWrap(info.maxMem)); + PyList_SetItem(py_retval, 2, libvirt_ulongWrap(info.memory)); PyList_SetItem(py_retval, 3, libvirt_intWrap((int) info.nrVirtCpu)); PyList_SetItem(py_retval, 4, libvirt_longlongWrap((unsigned long long) info.cpuTime)); diff --git a/python/libvirt_wrap.h b/python/libvirt_wrap.h index 906245aeee..8bcfdb3c7f 100644 --- a/python/libvirt_wrap.h +++ b/python/libvirt_wrap.h @@ -41,6 +41,7 @@ typedef struct { PyObject * libvirt_intWrap(int val); PyObject * libvirt_longWrap(long val); +PyObject * libvirt_ulongWrap(unsigned long val); PyObject * libvirt_longlongWrap(long long val); PyObject * libvirt_charPtrWrap(char *str); PyObject * libvirt_constcharPtrWrap(const char *str); diff --git a/python/types.c b/python/types.c index b98beef5d6..4ad4fa595c 100644 --- a/python/types.c +++ b/python/types.c @@ -33,6 +33,18 @@ libvirt_longWrap(long val) return (ret); } +PyObject * +libvirt_ulongWrap(unsigned long val) +{ + PyObject *ret; + +#ifdef DEBUG + printf("libvirt_ulongWrap: val = %lu\n", val); +#endif + ret = PyLong_FromLong(val); + return (ret); +} + PyObject * libvirt_longlongWrap(long long val) {