summaryrefslogtreecommitdiff
path: root/UnityCore
diff options
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2015-02-09 20:36:04 +0100
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2015-02-09 20:36:04 +0100
commitac34d549b09e021013c521cda8a1e0440c1301dc (patch)
treee43655a2ae3711734e661a34e23823dac11f1566 /UnityCore
parent91751edf0399c555c309cf75ae7e13e2f21d700e (diff)
DBusIndicators: don't crash on mismatching variant signature, log errors
(bzr r3899.2.72)
Diffstat (limited to 'UnityCore')
-rw-r--r--UnityCore/DBusIndicators.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/UnityCore/DBusIndicators.cpp b/UnityCore/DBusIndicators.cpp
index 1745707be..d19a4aec7 100644
--- a/UnityCore/DBusIndicators.cpp
+++ b/UnityCore/DBusIndicators.cpp
@@ -37,6 +37,19 @@ namespace indicator
namespace
{
DECLARE_LOGGER(logger, "unity.indicator.dbus");
+
+inline bool verify_variant_type(GVariant* value, const gchar* type)
+{
+ if (!g_variant_is_of_type (value, G_VARIANT_TYPE(type)))
+ {
+ LOG_ERROR(logger) << "Got invalid variant type: '"
+ << g_variant_get_type_string(value) << "' ('"
+ << type << "' was expected)";
+ return false;
+ }
+
+ return true;
+}
} // anonymous namespace
@@ -205,6 +218,9 @@ void DBusIndicators::Impl::OnIconsPathChanged(GVariant*)
void DBusIndicators::Impl::OnEntryActivated(GVariant* parameters)
{
+ if (!verify_variant_type(parameters, "(ss(iiuu))"))
+ return;
+
glib::String panel;
glib::String entry_id;
nux::Rect geo;
@@ -216,6 +232,9 @@ void DBusIndicators::Impl::OnEntryActivated(GVariant* parameters)
void DBusIndicators::Impl::OnEntryActivatedRequest(GVariant* parameters)
{
+ if (!verify_variant_type(parameters, "(s)"))
+ return;
+
glib::String entry_name;
g_variant_get(parameters, "(s)", &entry_name);
@@ -225,6 +244,9 @@ void DBusIndicators::Impl::OnEntryActivatedRequest(GVariant* parameters)
void DBusIndicators::Impl::OnEntryShowNowChanged(GVariant* parameters)
{
+ if (!verify_variant_type(parameters, "(sb)"))
+ return;
+
glib::String entry_name;
gboolean show_now;
g_variant_get(parameters, "(sb)", &entry_name, &show_now);
@@ -335,6 +357,9 @@ void DBusIndicators::Impl::Sync(GVariant* args, glib::Error const& error)
gboolean image_visible = false;
gint32 priority = -1;
+ if (!verify_variant_type(args, "(" ENTRY_ARRAY_SIGNATURE ")"))
+ return;
+
std::unordered_map<Indicator::Ptr, Indicator::Entries> indicators;
g_variant_get(args, "(" ENTRY_ARRAY_SIGNATURE ")", &iter);