summaryrefslogtreecommitdiff
path: root/_dbus_bindings/message-append.c
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2012-07-04 19:35:43 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2012-07-04 19:35:43 +0100
commit5b79604a6d1eb11268293342d19da633e5eedaa4 (patch)
tree7bcde319702a52e92163bbd819c2d491534f3005 /_dbus_bindings/message-append.c
parentbdc48547078b8ba09856c81b7c4f148fb163c01b (diff)
downloaddbus-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.c16
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;
}