From 8f04e1e01f51fa9bef564dbaf29be59694407d21 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Sun, 6 Feb 2005 04:21:57 +0000 Subject: 2005-02-05 Havoc Pennington * dbus/dbus-message-factory.c (generate_special): more test cases, increasing coverage * dbus/dbus-marshal-validate.c (validate_body_helper): return the reason why a signature was invalid * dbus/dbus-marshal-header.c (load_and_validate_field): fix to skip the length of the string before we look at it in validation * dbus/dbus-string-util.c (_dbus_string_test): add tests for equal_substring * dbus/dbus-message.c (_dbus_message_loader_new): default max_message_length to DBUS_MAXIMUM_MESSAGE_LENGTH --- dbus/dbus-marshal-header.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'dbus/dbus-marshal-header.c') diff --git a/dbus/dbus-marshal-header.c b/dbus/dbus-marshal-header.c index f32e7aa8..10d9e20b 100644 --- a/dbus/dbus-marshal-header.c +++ b/dbus/dbus-marshal-header.c @@ -773,6 +773,7 @@ load_and_validate_field (DBusHeader *header, int expected_type; const DBusString *value_str; int value_pos; + int str_data_pos; dbus_uint32_t v_UINT32; int bad_string_code; dbus_bool_t (* string_validation_func) (const DBusString *str, @@ -812,6 +813,7 @@ load_and_validate_field (DBusHeader *header, v_UINT32 = 0; value_str = NULL; value_pos = -1; + str_data_pos = -1; bad_string_code = DBUS_VALID; if (expected_type == DBUS_TYPE_UINT32) @@ -825,6 +827,7 @@ load_and_validate_field (DBusHeader *header, { _dbus_header_get_field_raw (header, field, &value_str, &value_pos); + str_data_pos = _DBUS_ALIGN_VALUE (value_pos, 4) + 4; } else { @@ -844,7 +847,7 @@ load_and_validate_field (DBusHeader *header, if (_dbus_string_equal_substring (&_dbus_local_interface_str, 0, _dbus_string_get_length (&_dbus_local_interface_str), - value_str, value_pos)) + value_str, str_data_pos)) { _dbus_verbose ("Message is on the local interface\n"); return DBUS_INVALID_USES_LOCAL_INTERFACE; @@ -870,13 +873,10 @@ load_and_validate_field (DBusHeader *header, /* OBJECT_PATH was validated generically due to its type */ string_validation_func = NULL; - _dbus_verbose ("value_str %p value_pos %d value_str_len %d\n", - value_str, value_pos, - _dbus_string_get_length (value_str)); if (_dbus_string_equal_substring (&_dbus_local_path_str, 0, _dbus_string_get_length (&_dbus_local_path_str), - value_str, value_pos)) + value_str, str_data_pos)) { _dbus_verbose ("Message is from the local path\n"); return DBUS_INVALID_USES_LOCAL_PATH; @@ -910,7 +910,11 @@ load_and_validate_field (DBusHeader *header, len = _dbus_marshal_read_uint32 (value_str, value_pos, header->byte_order, NULL); - if (!(*string_validation_func) (value_str, value_pos + 4, len)) +#if 0 + _dbus_verbose ("Validating string header field; code %d if fails\n", + bad_string_code); +#endif + if (!(*string_validation_func) (value_str, str_data_pos, len)) return bad_string_code; } -- cgit