summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-marshal.c
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@codefactory.se>2003-02-24 20:26:13 +0000
committerAnders Carlsson <andersca@codefactory.se>2003-02-24 20:26:13 +0000
commit3781f063a6dfbdeafea6d1c6c8ac10c8b22f8586 (patch)
tree926d560631100b7af15d7167428f61273a258061 /dbus/dbus-marshal.c
parentc96500c37f69a8103b38b0d3fb90d8b37097ebcf (diff)
2003-02-24 Anders Carlsson <andersca@codefactory.se>
* dbus/dbus-marshal.c: (_dbus_marshal_validate_arg): * dbus/dbus-message-builder.c: (_dbus_message_data_load): * dbus/dbus-message.c: (dbus_message_append_boolean), (dbus_message_append_boolean_array), (dbus_message_get_args_valist), (_dbus_message_test): * dbus/dbus-message.h: * doc/dbus-specification.sgml: Various fixes as pointed out by Havoc. * test/data/invalid-messages/bad-boolean-array.message: * test/data/invalid-messages/bad-boolean.message: Add invalid boolean value test cases.
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;