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 | |
| 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.
| -rw-r--r-- | ChangeLog | 15 | ||||
| -rw-r--r-- | dbus/dbus-marshal.c | 36 | ||||
| -rw-r--r-- | dbus/dbus-message-builder.c | 1 | ||||
| -rw-r--r-- | dbus/dbus-message.c | 20 | ||||
| -rw-r--r-- | dbus/dbus-message.h | 6 | ||||
| -rw-r--r-- | doc/dbus-specification.sgml | 2 | ||||
| -rw-r--r-- | test/data/invalid-messages/bad-boolean-array.message | 14 | ||||
| -rw-r--r-- | test/data/invalid-messages/bad-boolean.message | 10 | 
8 files changed, 91 insertions, 13 deletions
| @@ -1,5 +1,20 @@  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. +	 +2003-02-24  Anders Carlsson  <andersca@codefactory.se> +  	* dbus/dbus-internals.c: (_dbus_type_to_string):  	* dbus/dbus-marshal.c: (_dbus_marshal_get_arg_end_pos),  	(_dbus_marshal_validate_arg): 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; diff --git a/dbus/dbus-message-builder.c b/dbus/dbus-message-builder.c index 9526a2e1..dea50d7f 100644 --- a/dbus/dbus-message-builder.c +++ b/dbus/dbus-message-builder.c @@ -661,7 +661,6 @@ _dbus_message_data_load (DBusString       *dest,  	  while (i < _dbus_string_get_length (&line))  	    {  	      _dbus_string_skip_blank (&line, i, &i);	       -	      printf ("i is: %d\n", i);  	      if (_dbus_string_find_to (&line, i, i + 5,  					"false", NULL)) diff --git a/dbus/dbus-message.c b/dbus/dbus-message.c index 0d664916..584acc7e 100644 --- a/dbus/dbus-message.c +++ b/dbus/dbus-message.c @@ -1180,7 +1180,7 @@ dbus_message_append_nil (DBusMessage *message)   */  dbus_bool_t  dbus_message_append_boolean (DBusMessage  *message, -			     unsigned char value) +			     dbus_bool_t   value)  {    _dbus_assert (!message->locked); @@ -1305,9 +1305,9 @@ dbus_message_append_string (DBusMessage *message,   * @returns #TRUE on success   */  dbus_bool_t -dbus_message_append_boolean_array (DBusMessage   *message, -				   unsigned char *value, -				   int            len) +dbus_message_append_boolean_array (DBusMessage         *message, +				   unsigned const char *value, +				   int                  len)  {    _dbus_assert (!message->locked); @@ -1543,9 +1543,9 @@ dbus_message_get_args_valist (DBusMessage *message,  	  break;  	case DBUS_TYPE_BOOLEAN:  	  { -	    unsigned char *ptr; +	    dbus_bool_t *ptr; -	    ptr = va_arg (var_args, unsigned char *); +	    ptr = va_arg (var_args, dbus_bool_t *);  	    *ptr = dbus_message_iter_get_boolean (iter);  	    break; @@ -1854,7 +1854,7 @@ dbus_message_iter_get_string (DBusMessageIter *iter)   * @param iter the message iter   * @returns the string   */ -unsigned char  +dbus_bool_t  dbus_message_iter_get_boolean (DBusMessageIter *iter)  {    unsigned char value; @@ -3421,6 +3421,7 @@ _dbus_message_test (const char *test_data_dir)    dbus_int32_t our_int;    char *our_str;    double our_double; +  dbus_bool_t our_bool;    /* Test the vararg functions */    message = dbus_message_new ("org.freedesktop.DBus.Test", "testMessage"); @@ -3429,6 +3430,7 @@ _dbus_message_test (const char *test_data_dir)  			    DBUS_TYPE_INT32, -0x12345678,  			    DBUS_TYPE_STRING, "Test string",  			    DBUS_TYPE_DOUBLE, 3.14159, +			    DBUS_TYPE_BOOLEAN, TRUE,  			    0);    _dbus_verbose_bytes_of_string (&message->header, 0,                                   _dbus_string_get_length (&message->header)); @@ -3439,6 +3441,7 @@ _dbus_message_test (const char *test_data_dir)  			     DBUS_TYPE_INT32, &our_int,  			     DBUS_TYPE_STRING, &our_str,  			     DBUS_TYPE_DOUBLE, &our_double, +			     DBUS_TYPE_BOOLEAN, &our_bool,  			     0) != DBUS_RESULT_SUCCESS)      _dbus_assert_not_reached ("Could not get arguments"); @@ -3451,6 +3454,9 @@ _dbus_message_test (const char *test_data_dir)    if (strcmp (our_str, "Test string") != 0)      _dbus_assert_not_reached ("strings differ!"); +  if (!our_bool) +    _dbus_assert_not_reached ("booleans differ"); +      dbus_free (our_str);    dbus_message_unref (message); diff --git a/dbus/dbus-message.h b/dbus/dbus-message.h index ecb7407e..bb2b620e 100644 --- a/dbus/dbus-message.h +++ b/dbus/dbus-message.h @@ -67,7 +67,7 @@ dbus_bool_t dbus_message_append_args_valist   (DBusMessage          *message,  					       va_list               var_args);  dbus_bool_t dbus_message_append_nil           (DBusMessage          *message);  dbus_bool_t dbus_message_append_boolean       (DBusMessage          *message, -					       unsigned char         value); +					       dbus_bool_t           value);  dbus_bool_t dbus_message_append_int32         (DBusMessage          *message,  					       dbus_int32_t          value);  dbus_bool_t dbus_message_append_uint32        (DBusMessage          *message, @@ -77,7 +77,7 @@ dbus_bool_t dbus_message_append_double        (DBusMessage          *message,  dbus_bool_t dbus_message_append_string        (DBusMessage          *message,  					       const char           *value);  dbus_bool_t dbus_message_append_boolean_array (DBusMessage          *message, -					       unsigned char        *value, +					       unsigned const char  *value,  					       int                   len);  dbus_bool_t dbus_message_append_int32_array   (DBusMessage          *message,  					       const dbus_int32_t   *value, @@ -111,7 +111,7 @@ void          dbus_message_iter_unref             (DBusMessageIter   *iter);  dbus_bool_t   dbus_message_iter_has_next          (DBusMessageIter   *iter);  dbus_bool_t   dbus_message_iter_next              (DBusMessageIter   *iter);  int           dbus_message_iter_get_arg_type      (DBusMessageIter   *iter); -unsigned char dbus_message_iter_get_boolean       (DBusMessageIter   *iter); +dbus_bool_t   dbus_message_iter_get_boolean       (DBusMessageIter   *iter);  int           dbus_message_iter_get_int32         (DBusMessageIter   *iter);  int           dbus_message_iter_get_uint32        (DBusMessageIter   *iter);  double        dbus_message_iter_get_double        (DBusMessageIter   *iter); diff --git a/doc/dbus-specification.sgml b/doc/dbus-specification.sgml index 1e494115..b8bc4de7 100644 --- a/doc/dbus-specification.sgml +++ b/doc/dbus-specification.sgml @@ -300,7 +300,7 @@                </row><row>  		<entry>BOOLEAN</entry>  		<entry>2</entry> -		<entry>Boolean value, 0 is FALSE and everything else is TRUE.</entry> +		<entry>Boolean value, 0 is FALSE and 1 is TRUE. Everything else is invalid.</entry>  	      </row><row>                  <entry>INT32</entry>                  <entry>3</entry> diff --git a/test/data/invalid-messages/bad-boolean-array.message b/test/data/invalid-messages/bad-boolean-array.message new file mode 100644 index 00000000..54b31d6c --- /dev/null +++ b/test/data/invalid-messages/bad-boolean-array.message @@ -0,0 +1,14 @@ +## a message with an invalid boolean array + +## VALID_HEADER includes a LENGTH Header and LENGTH Body +VALID_HEADER +ALIGN 8 +END_LENGTH Header +START_LENGTH Body +TYPE BOOLEAN_ARRAY +ALIGN 4 +INT32 3 +BYTE 0 +BYTE 1 +BYTE 3 +END_LENGTH Body diff --git a/test/data/invalid-messages/bad-boolean.message b/test/data/invalid-messages/bad-boolean.message new file mode 100644 index 00000000..0755ab5e --- /dev/null +++ b/test/data/invalid-messages/bad-boolean.message @@ -0,0 +1,10 @@ +## a message with an invalid boolean value + +## VALID_HEADER includes a LENGTH Header and LENGTH Body +VALID_HEADER +ALIGN 8 +END_LENGTH Header +START_LENGTH Body +TYPE BOOLEAN +BYTE 3 +END_LENGTH Body | 
