summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteffen Kieß <Steffen.Kiess@ipvs.uni-stuttgart.de>2016-02-22 11:04:44 +0100
committerSteffen Kieß <Steffen.Kiess@ipvs.uni-stuttgart.de>2016-02-22 11:04:44 +0100
commit021325e5e5cec6fe618f7ac6bcc2f5a20f40f07f (patch)
tree906d8cd96691991bdb2c5709d02f55ceab75273d
parent9e97cdbcc029da35b5341777de092fa16908fb52 (diff)
downloaddbus-c++-021325e5e5cec6fe618f7ac6bcc2f5a20f40f07f.tar.gz
Fix copying containers
dbus_message_iter_open_container() needs a signature argument for variants and arrays, and NULL for structs and dict entries.
-rw-r--r--src/message.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/message.cpp b/src/message.cpp
index 3f0cac4..eacea92 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -346,13 +346,17 @@ void MessageIter::copy_data(MessageIter &to)
debug_log("copying compound type: %c[%s]", from.type(), sig);
MessageIter to_container(to.msg());
- dbus_message_iter_open_container
+ dbus_bool_t ret = dbus_message_iter_open_container
(
(DBusMessageIter *) & (to._iter),
from.type(),
- from.type() == DBUS_TYPE_VARIANT ? NULL : sig,
+ (from.type() == DBUS_TYPE_VARIANT || from.type() == DBUS_TYPE_ARRAY) ? sig : NULL,
(DBusMessageIter *) & (to_container._iter)
);
+ if (!ret)
+ {
+ throw ErrorNoMemory("Unable to append container");
+ }
from_container.copy_data(to_container);
to.close_container(to_container);