diff options
author | Anders Carlsson <andersca@codefactory.se> | 2003-02-24 20:26:13 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@codefactory.se> | 2003-02-24 20:26:13 +0000 |
commit | 3781f063a6dfbdeafea6d1c6c8ac10c8b22f8586 (patch) | |
tree | 926d560631100b7af15d7167428f61273a258061 /dbus/dbus-marshal.c | |
parent | c96500c37f69a8103b38b0d3fb90d8b37097ebcf (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.c | 36 |
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; |