From 7aee1baeea1777318932cc49a8eac18f194233cd Mon Sep 17 00:00:00 2001 From: Christian Linke Date: Mon, 2 Sep 2013 18:05:26 +0200 Subject: * Prevent infinite loop when iterating over arrays If the array contains more than one element dbus_message_iter_recurse will reset the iterator to the beginning on every iteration leading to an infinite loop. Signed-off-by: Christian Linke --- .../src/CAmDbusMessageHandler.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'PluginRoutingInterfaceDbus') diff --git a/PluginRoutingInterfaceDbus/src/CAmDbusMessageHandler.cpp b/PluginRoutingInterfaceDbus/src/CAmDbusMessageHandler.cpp index 096dfbf..f3981a2 100644 --- a/PluginRoutingInterfaceDbus/src/CAmDbusMessageHandler.cpp +++ b/PluginRoutingInterfaceDbus/src/CAmDbusMessageHandler.cpp @@ -299,9 +299,9 @@ std::vector CAmRoutingDbusMessageHandler::getEarlyData() am_EarlyData_s earlyData; //first the volume array + dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); do { - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); dbus_message_iter_recurse(&arrayIter, &structIter); earlyData.type = static_cast(getUInt(structIter, true)); if (earlyData.type==ED_SINK_VOLUME) @@ -314,9 +314,9 @@ std::vector CAmRoutingDbusMessageHandler::getEarlyData() dbus_message_iter_next(&mDBusMessageIter); //then the soundproperty array + dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); do { - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); dbus_message_iter_recurse(&arrayIter, &structIter); earlyData.type = static_cast(getUInt(structIter, true)); if (earlyData.type==ED_SINK_PROPERTY) @@ -549,23 +549,23 @@ am_Gateway_s CAmRoutingDbusMessageHandler::getGatewayData() gatewayData.domainSinkID = static_cast(getUInt(gatewayDataIter, true)); gatewayData.domainSourceID = static_cast(getUInt(gatewayDataIter, true)); gatewayData.controlDomainID = static_cast(getUInt(gatewayDataIter, true)); + dbus_message_iter_recurse(&gatewayDataIter, &arrayIter); do { - dbus_message_iter_recurse(&gatewayDataIter, &arrayIter); connectionFormat = static_cast(getInt32(arrayIter, false)); gatewayData.listSourceFormats.push_back(connectionFormat); } while (dbus_message_iter_next(&arrayIter)); dbus_message_iter_next(&gatewayDataIter); + dbus_message_iter_recurse(&gatewayDataIter, &arrayIter); do { - dbus_message_iter_recurse(&gatewayDataIter, &arrayIter); connectionFormat = static_cast(getInt32(arrayIter, false)); gatewayData.listSinkFormats.push_back(connectionFormat); } while (dbus_message_iter_next(&arrayIter)); dbus_message_iter_next(&gatewayDataIter); + dbus_message_iter_recurse(&gatewayDataIter, &arrayIter); do { - dbus_message_iter_recurse(&gatewayDataIter, &arrayIter); convertion = getBool(arrayIter, false); gatewayData.convertionMatrix.push_back(convertion); } while (dbus_message_iter_next(&arrayIter)); @@ -958,9 +958,9 @@ std::vector CAmRoutingDbusMessageHandler::getListconnecti } else { + dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); do { - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); am_ConnectionFormat_e connectionformat(static_cast(getUInt(arrayIter, false))); listConnectionFormats.push_back(connectionformat); } while (dbus_message_iter_next(&arrayIter)); @@ -982,9 +982,9 @@ std::vector CAmRoutingDbusMessageHandler::getListBool() } else { + dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); do { - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); bool myBool(static_cast(getBool(arrayIter, false))); listBools.push_back(myBool); } while (dbus_message_iter_next(&arrayIter)); @@ -1020,9 +1020,9 @@ std::vector CAmRoutingDbusMessageHandler::getListSoundProper } else { + dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); do { - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); dbus_message_iter_recurse(&arrayIter, &structIter); soundProperty.type = static_cast(getInt(structIter, true)); soundProperty.value = static_cast(getInt(structIter, false)); @@ -1047,9 +1047,9 @@ std::vector CAmRoutingDbusMessageHandler::getListMainSou } else { + dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); do { - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); dbus_message_iter_recurse(&arrayIter, &structIter); soundProperty.type = static_cast(getInt(structIter, true)); soundProperty.value = static_cast(getInt(structIter, false)); -- cgit v1.2.1