diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2012-07-04 19:35:43 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2012-07-04 19:35:43 +0100 |
commit | 5b79604a6d1eb11268293342d19da633e5eedaa4 (patch) | |
tree | 7bcde319702a52e92163bbd819c2d491534f3005 /_dbus_bindings/message-append.c | |
parent | bdc48547078b8ba09856c81b7c4f148fb163c01b (diff) | |
download | dbus-python-5b79604a6d1eb11268293342d19da633e5eedaa4.tar.gz |
Avoid variable-length arrays, which MSVC *still* doesn't support
Based on patches from Christoph Höger.
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=51725
Diffstat (limited to '_dbus_bindings/message-append.c')
-rw-r--r-- | _dbus_bindings/message-append.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/_dbus_bindings/message-append.c b/_dbus_bindings/message-append.c index e519ae2..27522bf 100644 --- a/_dbus_bindings/message-append.c +++ b/_dbus_bindings/message-append.c @@ -962,6 +962,7 @@ _message_iter_append_variant(DBusMessageIter *appender, PyObject *obj) int ret; long variant_level; dbus_bool_t dummy; + DBusMessageIter *variant_iters = NULL; /* Separate the object into the contained object, and the number of * variants it's wrapped in. */ @@ -987,10 +988,17 @@ _message_iter_append_variant(DBusMessageIter *appender, PyObject *obj) dbus_signature_iter_init(&obj_sig_iter, obj_sig_str); - { /* scope for variant_iters */ - DBusMessageIter variant_iters[variant_level]; + { long i; + variant_iters = calloc (variant_level, sizeof (DBusMessageIter)); + + if (!variant_iters) { + PyErr_NoMemory(); + ret = -1; + goto out; + } + for (i = 0; i < variant_level; i++) { DBusMessageIter *child = &variant_iters[i]; /* The first is a special case: its parent is the iter passed in @@ -1038,10 +1046,12 @@ _message_iter_append_variant(DBusMessageIter *appender, PyObject *obj) goto out; } } - } out: + if (variant_iters != NULL) + free (variant_iters); + Py_CLEAR(obj_sig); return ret; } |