← Back to team overview

ayatana-commits team mailing list archive

[Branch ~dbusmenu-team/dbusmenu/trunk] Rev 119: Protect from unexpected arrays on the bus.

 

Merge authors:
  Ted Gould (ted)
Related merge proposals:
  https://code.launchpad.net/~ted/dbusmenu/value-protection/+merge/28234
  proposed by: Ted Gould (ted)
  review: Approve - Jason Smith (jassmith)
  review: Approve - David Barth (dbarth)
------------------------------------------------------------
revno: 119 [merge]
committer: Ted Gould <ted@xxxxxxxx>
branch nick: trunk
timestamp: Tue 2010-06-22 14:52:11 -0500
message:
  Protect from unexpected arrays on the bus.
modified:
  libdbusmenu-gtk/menuitem.c


--
lp:dbusmenu
https://code.launchpad.net/~dbusmenu-team/dbusmenu/trunk

Your team ayatana-commits is subscribed to branch lp:dbusmenu.
To unsubscribe from this branch go to https://code.launchpad.net/~dbusmenu-team/dbusmenu/trunk/+edit-subscription
=== modified file 'libdbusmenu-gtk/menuitem.c'
--- libdbusmenu-gtk/menuitem.c	2010-06-22 16:03:42 +0000
+++ libdbusmenu-gtk/menuitem.c	2010-06-22 19:45:03 +0000
@@ -295,6 +295,10 @@
 	if (wrapper == NULL) {
 		return;
 	}
+	if (!G_VALUE_HOLDS(wrapper, G_TYPE_VALUE_ARRAY)) {
+		g_warning("Unexpected shortcut structure.  Wrapper is: %s", G_VALUE_TYPE_NAME(wrapper));
+		return;
+	}
 
 	GValueArray * wrapperarray = (GValueArray *)g_value_get_boxed(wrapper);
 	if (wrapperarray->n_values == 0) {
@@ -306,6 +310,11 @@
 	}
 
 	GValue * ventryarray = g_value_array_get_nth(wrapperarray, 0);
+	if (!G_VALUE_HOLDS(ventryarray, G_TYPE_VALUE_ARRAY)) {
+		g_warning("Unexpected shortcut structure.  Value array is: %s", G_VALUE_TYPE_NAME(ventryarray));
+		return;
+	}
+
 	GValueArray * entryarray = (GValueArray *)g_value_get_boxed(ventryarray);
 	if (entryarray->n_values == 0) {
 		/* Seems a little odd, but really, we're saying that it isn't a
@@ -316,19 +325,25 @@
 	/* Parse through modifiers */
 	int i;
 	for (i = 0; i < entryarray->n_values - 1; i++) {
-		if (g_strcmp0(g_value_get_string(g_value_array_get_nth(entryarray, i)), DBUSMENU_MENUITEM_SHORTCUT_CONTROL) == 0) {
+		GValue * value = g_value_array_get_nth(entryarray, i);
+
+		if (!G_VALUE_HOLDS_STRING(value)) {
+			continue;
+		}
+
+		if (g_strcmp0(g_value_get_string(value), DBUSMENU_MENUITEM_SHORTCUT_CONTROL) == 0) {
 			*modifier |= GDK_CONTROL_MASK;
 			continue;
 		}
-		if (g_strcmp0(g_value_get_string(g_value_array_get_nth(entryarray, i)), DBUSMENU_MENUITEM_SHORTCUT_ALT) == 0) {
+		if (g_strcmp0(g_value_get_string(value), DBUSMENU_MENUITEM_SHORTCUT_ALT) == 0) {
 			*modifier |= GDK_MOD1_MASK;
 			continue;
 		}
-		if (g_strcmp0(g_value_get_string(g_value_array_get_nth(entryarray, i)), DBUSMENU_MENUITEM_SHORTCUT_SHIFT) == 0) {
+		if (g_strcmp0(g_value_get_string(value), DBUSMENU_MENUITEM_SHORTCUT_SHIFT) == 0) {
 			*modifier |= GDK_SHIFT_MASK;
 			continue;
 		}
-		if (g_strcmp0(g_value_get_string(g_value_array_get_nth(entryarray, i)), DBUSMENU_MENUITEM_SHORTCUT_SUPER) == 0) {
+		if (g_strcmp0(g_value_get_string(value), DBUSMENU_MENUITEM_SHORTCUT_SUPER) == 0) {
 			*modifier |= GDK_SUPER_MASK;
 			continue;
 		}
@@ -336,7 +351,13 @@
 
 	GdkModifierType tempmod;
 
-	gtk_accelerator_parse(g_value_get_string(g_value_array_get_nth(entryarray, entryarray->n_values - 1)), key, &tempmod);
+	GValue * accelval = g_value_array_get_nth(entryarray, entryarray->n_values - 1);
+	if (!G_VALUE_HOLDS_STRING(accelval)) {
+		*modifier = 0;
+		return;
+	}
+
+	gtk_accelerator_parse(g_value_get_string(accelval), key, &tempmod);
 
 	return;
 }