{
DBusMessageIter iter2;
const char *v_STRING = "This is an error";
-
+
dbus_message_iter_init_append (message, &iter2);
if (!dbus_message_iter_append_basic (&iter2,
DBUS_TYPE_STRING,
&v_STRING))
_dbus_test_fatal ("oom");
}
-
+
set_reply_serial (message);
break;
default:
return FALSE;
}
-
+
if (message == NULL)
_dbus_test_fatal ("oom");
*message_p = message;
-
+
return TRUE;
}
_dbus_marshal_set_uint32 (&message->header.data, BODY_LENGTH_OFFSET,
_dbus_string_get_length (&message->body),
byte_order);
-
+
*message_p = message;
}
else
dbus_message_unref (message);
*message_p = NULL;
}
-
+
_dbus_string_free (&signature);
_dbus_string_free (&body);
dbus_message_lock (message);
*expected_validity = DBUS_VALID;
-
+
/* move for efficiency, since we'll nuke the message anyway */
if (!_dbus_string_move (&message->header.data, 0,
data, 0))
return FALSE;
iter_next (iter);
-
+
_dbus_assert (message != NULL);
generate_from_message (data, expected_validity, message);
_dbus_test_fatal ("oom");
set_reply_serial (message);
-
+
return message;
}
_dbus_test_fatal ("oom");
set_reply_serial (message);
-
+
return message;
}
dbus_int32_t v_INT32;
_dbus_assert (_dbus_string_get_length (data) == 0);
-
+
message = NULL;
pos = -1;
v_INT32 = 42;
DBUS_HEADER_FIELD_SIGNATURE,
NULL, &pos);
generate_from_message (data, expected_validity, message);
-
+
/* set an invalid typecode */
_dbus_string_set_byte (data, pos + 1, '$');
char long_sig[DBUS_MAXIMUM_TYPE_RECURSION_DEPTH+2];
const char *v_STRING;
int i;
-
+
message = simple_method_call ();
if (!dbus_message_append_args (message,
DBUS_TYPE_INT32, &v_INT32,
DBUS_HEADER_FIELD_SIGNATURE,
NULL, &pos);
generate_from_message (data, expected_validity, message);
-
+
*expected_validity = DBUS_INVALID_EXCEEDED_MAXIMUM_ARRAY_RECURSION;
}
else if (item_seq == 2)
char long_sig[DBUS_MAXIMUM_TYPE_RECURSION_DEPTH*2+4];
const char *v_STRING;
int i;
-
+
message = simple_method_call ();
if (!dbus_message_append_args (message,
DBUS_TYPE_INT32, &v_INT32,
++i;
}
long_sig[i] = DBUS_TYPE_INVALID;
-
+
v_STRING = long_sig;
if (!_dbus_header_set_field_basic (&message->header,
DBUS_HEADER_FIELD_SIGNATURE,
DBUS_HEADER_FIELD_SIGNATURE,
NULL, &pos);
generate_from_message (data, expected_validity, message);
-
+
*expected_validity = DBUS_INVALID_EXCEEDED_MAXIMUM_STRUCT_RECURSION;
}
else if (item_seq == 3)
DBUS_HEADER_FIELD_SIGNATURE,
NULL, &pos);
generate_from_message (data, expected_validity, message);
-
+
_dbus_string_set_byte (data, pos + 1, DBUS_STRUCT_BEGIN_CHAR);
-
+
*expected_validity = DBUS_INVALID_STRUCT_STARTED_BUT_NOT_ENDED;
}
else if (item_seq == 4)
DBUS_HEADER_FIELD_SIGNATURE,
NULL, &pos);
generate_from_message (data, expected_validity, message);
-
+
_dbus_string_set_byte (data, pos + 1, DBUS_STRUCT_END_CHAR);
-
+
*expected_validity = DBUS_INVALID_STRUCT_ENDED_BUT_NOT_STARTED;
}
else if (item_seq == 5)
DBUS_HEADER_FIELD_SIGNATURE,
NULL, &pos);
generate_from_message (data, expected_validity, message);
-
+
_dbus_string_set_byte (data, pos + 1, DBUS_STRUCT_BEGIN_CHAR);
_dbus_string_set_byte (data, pos + 2, DBUS_STRUCT_END_CHAR);
-
+
*expected_validity = DBUS_INVALID_STRUCT_HAS_NO_FIELDS;
}
else if (item_seq == 6)
{
message = simple_method_call ();
generate_from_message (data, expected_validity, message);
-
+
_dbus_string_set_byte (data, TYPE_OFFSET, DBUS_MESSAGE_TYPE_INVALID);
-
+
*expected_validity = DBUS_INVALID_BAD_MESSAGE_TYPE;
}
else if (item_seq == 7)
/* Messages of unknown type are considered valid */
message = simple_method_call ();
generate_from_message (data, expected_validity, message);
-
+
_dbus_string_set_byte (data, TYPE_OFFSET, 100);
-
+
*expected_validity = DBUS_VALID;
}
else if (item_seq == 8)
message = simple_method_call ();
byte_order = _dbus_header_get_byte_order (&message->header);
generate_from_message (data, expected_validity, message);
-
+
_dbus_marshal_set_uint32 (data, BODY_LENGTH_OFFSET,
DBUS_MAXIMUM_MESSAGE_LENGTH / 2 + 4,
byte_order);
_dbus_test_fatal ("oom");
generate_from_message (data, expected_validity, message);
-
+
*expected_validity = DBUS_VALID;
}
else if (item_seq == 13)
_dbus_test_fatal ("oom");
generate_from_message (data, expected_validity, message);
-
+
*expected_validity = DBUS_INVALID_MISSING_INTERFACE;
}
else if (item_seq == 14)
_dbus_test_fatal ("oom");
generate_from_message (data, expected_validity, message);
-
+
*expected_validity = DBUS_INVALID_MISSING_REPLY_SERIAL;
}
else if (item_seq == 15)
_dbus_test_fatal ("oom");
generate_from_message (data, expected_validity, message);
-
+
*expected_validity = DBUS_INVALID_MISSING_ERROR_NAME;
}
else if (item_seq == 16)
const char *v_STRING;
int i;
int n_begins;
-
+
message = simple_method_call ();
if (!dbus_message_append_args (message,
DBUS_TYPE_INT32, &v_INT32,
long_sig[i] = DBUS_TYPE_INT32;
++i;
-
+
while (n_begins > 0)
{
long_sig[i] = DBUS_DICT_ENTRY_END_CHAR;
n_begins -= 1;
}
long_sig[i] = DBUS_TYPE_INVALID;
-
+
v_STRING = long_sig;
if (!_dbus_header_set_field_basic (&message->header,
DBUS_HEADER_FIELD_SIGNATURE,
DBUS_HEADER_FIELD_SIGNATURE,
NULL, &pos);
generate_from_message (data, expected_validity, message);
-
+
*expected_validity = DBUS_INVALID_EXCEEDED_MAXIMUM_DICT_ENTRY_RECURSION;
}
else if (item_seq == 17)
_dbus_string_set_byte (data, pos + 1, DBUS_TYPE_ARRAY);
_dbus_string_set_byte (data, pos + 2, DBUS_DICT_ENTRY_BEGIN_CHAR);
-
+
*expected_validity = DBUS_INVALID_DICT_ENTRY_STARTED_BUT_NOT_ENDED;
}
else if (item_seq == 18)
DBUS_HEADER_FIELD_SIGNATURE,
NULL, &pos);
generate_from_message (data, expected_validity, message);
-
+
_dbus_string_set_byte (data, pos + 1, DBUS_DICT_ENTRY_END_CHAR);
-
+
*expected_validity = DBUS_INVALID_DICT_ENTRY_ENDED_BUT_NOT_STARTED;
}
else if (item_seq == 19)
_dbus_string_set_byte (data, pos + 1, DBUS_TYPE_ARRAY);
_dbus_string_set_byte (data, pos + 2, DBUS_DICT_ENTRY_BEGIN_CHAR);
_dbus_string_set_byte (data, pos + 3, DBUS_DICT_ENTRY_END_CHAR);
-
+
*expected_validity = DBUS_INVALID_DICT_ENTRY_HAS_NO_FIELDS;
}
else if (item_seq == 20)
return FALSE;
_dbus_assert (len_seq < _DBUS_N_ELEMENTS (lengths));
-
+
iter_recurse (iter);
if (!generate_many_bodies (iter, data, expected_validity))
{
*expected_validity = DBUS_INVALID_FOR_UNKNOWN_REASON;
}
else
- {
+ {
if (!_dbus_string_lengthen (data, adjust))
_dbus_test_fatal ("oom");
*expected_validity = DBUS_INVALID_TOO_MUCH_DATA;
int old_body_len;
int new_body_len;
int byte_order;
-
+
_dbus_assert (_dbus_string_get_length (data) >= DBUS_MINIMUM_HEADER_SIZE);
-
+
byte_order = _dbus_string_get_byte (data, BYTE_ORDER_OFFSET);
old_body_len = _dbus_marshal_read_uint32 (data,
BODY_LENGTH_OFFSET,
_dbus_verbose ("changing body len from %u to %u by adjust %d\n",
old_body_len, new_body_len, adjust);
-
+
_dbus_marshal_set_uint32 (data, BODY_LENGTH_OFFSET,
new_body_len,
byte_order);
byte_seq = iter_get_sequence (iter);
iter_next (iter);
iter_unrecurse (iter);
-
+
if (byte_seq == _dbus_string_get_length (data))
{
_dbus_string_set_length (data, 0);
_dbus_string_set_length (data, 0);
body_seq = iter_get_sequence (iter);
-
+
if (!generate_many_bodies (iter, data, expected_validity))
return FALSE;
/* Undo the "next" in generate_many_bodies */
iter_set_sequence (iter, body_seq);
-
+
iter_recurse (iter);
while (TRUE)
{
_dbus_assert (iter->depth == (base_depth + 1));
-
+
byte_seq = iter_get_sequence (iter);
_dbus_assert (byte_seq <= _dbus_string_get_length (data));
-
+
if (byte_seq == _dbus_string_get_length (data))
{
/* reset byte count */
iter_unrecurse (iter);
_dbus_assert (iter->depth == (base_depth + 0));
-
+
return TRUE;
}
restart:
_dbus_assert (iter->depth == (base_depth + 0));
_dbus_string_set_length (data, 0);
-
+
if (!find_next_typecode (iter, data, expected_validity))
return FALSE;
byte_seq = iter_get_sequence (iter);
_dbus_assert (byte_seq < _dbus_string_get_length (data));
-
+
iter_recurse (iter);
typecode_seq = iter_get_sequence (iter);
iter_next (iter);
_dbus_assert (typecode_seq <= _DBUS_N_ELEMENTS (typecodes));
-
+
if (typecode_seq == _DBUS_N_ELEMENTS (typecodes))
{
_dbus_assert (iter->depth == (base_depth + 2));
_dbus_test_diag ("Changing byte %d in message %d to %c",
byte_seq, iter_get_sequence (iter), typecodes[typecode_seq]);
#endif
-
+
_dbus_string_set_byte (data, byte_seq, typecodes[typecode_seq]);
*expected_validity = DBUS_VALIDITY_UNKNOWN;
return TRUE;
*/
base_depth = iter->depth;
-
+
next_body:
_dbus_assert (iter->depth == (base_depth + 0));
_dbus_string_set_length (data, 0);
body_seq = iter_get_sequence (iter);
-
+
if (!generate_many_bodies (iter, data, expected_validity))
return FALSE;
next_change:
_dbus_assert (iter->depth == (base_depth + 1));
change_seq = iter_get_sequence (iter);
-
+
if (change_seq == _DBUS_N_ELEMENTS (uint32_changes))
{
/* Reset change count */
}
_dbus_assert (iter->depth == (base_depth + 1));
-
+
iter_recurse (iter);
_dbus_assert (iter->depth == (base_depth + 2));
byte_seq = iter_get_sequence (iter);
iter_next (iter);
goto next_change;
}
-
+
_dbus_assert (byte_seq <= (_dbus_string_get_length (data) - 4));
byte_order = _dbus_string_get_byte (data, BYTE_ORDER_OFFSET);
-
+
v_UINT32 = _dbus_marshal_read_uint32 (data, byte_seq, byte_order, NULL);
change = &uint32_changes[change_seq];
_dbus_test_diag ("adjust by %d", (int) change->value);
else
_dbus_test_diag ("set to %u", change->value);
-
+
_dbus_test_diag (" \t%u -> %u",
_dbus_marshal_read_uint32 (data, byte_seq, byte_order, NULL),
v_UINT32);
#endif
-
+
_dbus_marshal_set_uint32 (data, byte_seq, v_UINT32, byte_order);
*expected_validity = DBUS_VALIDITY_UNKNOWN;
_dbus_assert (iter->depth == (base_depth + 1));
iter_unrecurse (iter);
_dbus_assert (iter->depth == (base_depth + 0));
-
+
return TRUE;
}
typedef struct
{
const char *name;
- DBusMessageGeneratorFunc func;
+ DBusMessageGeneratorFunc func;
} DBusMessageGenerator;
static const DBusMessageGenerator generators[] = {
_dbus_message_data_iter_init (DBusMessageDataIter *iter)
{
int i;
-
+
iter->depth = 0;
i = 0;
while (i < _DBUS_MESSAGE_DATA_MAX_NESTING)
restart:
generator = iter_get_sequence (iter);
-
+
if (generator == _DBUS_N_ELEMENTS (generators))
return FALSE;
iter_recurse (iter);
-
+
if (iter_first_in_series (iter))
{
_dbus_test_diag (" testing message loading: %s ", generators[generator].name);
}
-
+
func = generators[generator].func;
if (!_dbus_string_init (&data->data))