summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-marshal.c
diff options
context:
space:
mode:
Diffstat (limited to 'dbus/dbus-marshal.c')
-rw-r--r--dbus/dbus-marshal.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/dbus/dbus-marshal.c b/dbus/dbus-marshal.c
index 37a97515..b9b2cf52 100644
--- a/dbus/dbus-marshal.c
+++ b/dbus/dbus-marshal.c
@@ -1109,9 +1109,20 @@ _dbus_marshal_validate_arg (const DBusString *str,
break;
case DBUS_TYPE_BOOLEAN:
+ {
+ unsigned char c;
+
+ c = _dbus_string_get_byte (str, pos + 1);
+
+ if (c != 0 && c != 1)
+ {
+ _dbus_verbose ("boolean value must be either 0 or 1, not %d\n", c);
+ return FALSE;
+ }
+
*end_pos = pos + 2;
break;
-
+ }
case DBUS_TYPE_INT32:
case DBUS_TYPE_UINT32:
{
@@ -1162,6 +1173,29 @@ _dbus_marshal_validate_arg (const DBusString *str,
break;
case DBUS_TYPE_BOOLEAN_ARRAY:
+ {
+ int len, i;
+
+ len = demarshal_and_validate_len (str, byte_order, pos + 1, &pos);
+ if (len < 0)
+ return FALSE;
+
+ i = 0;
+ while (i < len)
+ {
+ unsigned char c = _dbus_string_get_byte (str, pos + i);
+
+ if (c != 0 && c != 1)
+ {
+ _dbus_verbose ("boolean value must be either 0 or 1, not %d (pos %d)\n", c, pos);
+ return FALSE;
+ }
+
+ i++;
+ }
+ *end_pos = pos + len;
+ break;
+ }
case DBUS_TYPE_BYTE_ARRAY:
{
int len;