Commit 40751c84 authored by Havoc Pennington's avatar Havoc Pennington

2003-10-11 Havoc Pennington <hp@pobox.com>

	* dbus/dbus-message.c (_dbus_message_test): add more test
	coverage, but #if 0 for now since they uncover a bug
	not fixed yet; I think in re_align_field_recurse()
	(re_align_field_recurse): add FIXME about broken assertion

	* dbus/dbus-sysdeps.c (_dbus_sysdeps_test): add more test coverage

	* bus/connection.c: share a couple code bits with expirelist.c

	* bus/expirelist.h, bus/expirelist.c: implement a generic
	expire-items-after-N-seconds facility, was going to share between
	expiring connections and replies, decided not to use for expiring
	connections for now.

	* bus/connection.c: add tracking of expected replies

	* COPYING: include AFL 2.0 (still need to change all the file headers)
parent c1f0e189
This diff is collapsed.
2003-10-11 Havoc Pennington <hp@pobox.com>
* dbus/dbus-message.c (_dbus_message_test): add more test
coverage, but #if 0 for now since they uncover a bug
not fixed yet; I think in re_align_field_recurse()
(re_align_field_recurse): add FIXME about broken assertion
* dbus/dbus-sysdeps.c (_dbus_sysdeps_test): add more test coverage
* bus/connection.c: share a couple code bits with expirelist.c
* bus/expirelist.h, bus/expirelist.c: implement a generic
expire-items-after-N-seconds facility, was going to share between
expiring connections and replies, decided not to use for expiring
connections for now.
* bus/connection.c: add tracking of expected replies
* COPYING: include AFL 2.0 (still need to change all the file headers)
2003-10-09 Havoc Pennington <hp@redhat.com>
* configure.in: define DBUS_HAVE_GCC33_GCOV if we have
......
......@@ -40,6 +40,8 @@ BUS_SOURCES= \
dispatch.h \
driver.c \
driver.h \
expirelist.c \
expirelist.h \
policy.c \
policy.h \
services.c \
......
......@@ -26,6 +26,7 @@
#include "services.h"
#include "utils.h"
#include "signals.h"
#include "expirelist.h"
#include <dbus/dbus-list.h>
#include <dbus/dbus-hash.h>
#include <dbus/dbus-timeout.h>
......@@ -672,8 +673,9 @@ bus_connections_expire_incomplete (BusConnections *connections)
_dbus_assert (d != NULL);
elapsed = ((double) tv_sec - (double) d->connection_tv_sec) * 1000.0 +
((double) tv_usec - (double) d->connection_tv_usec) / 1000.0;
elapsed = ELAPSED_MILLISECONDS_SINCE (d->connection_tv_sec,
d->connection_tv_usec,
tv_sec, tv_usec);
if (elapsed >= (double) auth_timeout)
{
......@@ -693,25 +695,9 @@ bus_connections_expire_incomplete (BusConnections *connections)
link = next;
}
}
if (next_interval >= 0)
{
_dbus_timeout_set_interval (connections->expire_timeout,
next_interval);
_dbus_timeout_set_enabled (connections->expire_timeout, TRUE);
_dbus_verbose ("Enabled incomplete connections timeout with interval %d, %d incomplete connections\n",
next_interval, connections->n_incomplete);
}
else if (dbus_timeout_get_enabled (connections->expire_timeout))
{
_dbus_timeout_set_enabled (connections->expire_timeout, FALSE);
_dbus_verbose ("Disabled incomplete connections timeout, %d incomplete connections\n",
connections->n_incomplete);
}
else
_dbus_verbose ("No need to disable incomplete connections timeout\n");
bus_expire_timeout_set_interval (connections->expire_timeout,
next_interval);
}
static dbus_bool_t
......
......@@ -76,6 +76,12 @@ main (int argc, char **argv)
if (!_dbus_threads_init_debug ())
die ("initializing debug threads");
#endif
printf ("%s: Running expire list test\n", argv[0]);
if (!bus_expire_list_test (&test_data_dir))
die ("expire list");
check_memleaks (argv[0]);
printf ("%s: Running config file parser test\n", argv[0]);
if (!bus_config_parser_test (&test_data_dir))
......
......@@ -37,6 +37,7 @@ dbus_bool_t bus_dispatch_sha1_test (const DBusString *test_data_d
dbus_bool_t bus_policy_test (const DBusString *test_data_dir);
dbus_bool_t bus_config_parser_test (const DBusString *test_data_dir);
dbus_bool_t bus_signals_test (const DBusString *test_data_dir);
dbus_bool_t bus_expire_list_test (const DBusString *test_data_dir);
dbus_bool_t bus_setup_debug_client (DBusConnection *connection);
void bus_test_clients_foreach (BusConnectionForeachFunction function,
void *data);
......
......@@ -489,6 +489,9 @@ re_align_field_recurse (DBusMessage *message,
case DBUS_TYPE_NAMED:
case DBUS_TYPE_ARRAY:
case DBUS_TYPE_DICT:
/* FIXME This is no good; we have to handle undefined header fields
* also. SECURITY and spec compliance issue.
*/
_dbus_assert_not_reached ("no defined header fields may contain a named, array or dict value");
break;
case DBUS_TYPE_INVALID:
......@@ -540,7 +543,7 @@ re_align_field_recurse (DBusMessage *message,
/* this must succeed because it was allocated on function entry and
* DBusString doesn't ever realloc smaller
*/
_dbus_string_insert_bytes (&message->header, pos, -delta, 0);
_dbus_string_insert_bytes (&message->header, pos, -delta, 0);
}
return FALSE;
......@@ -729,7 +732,7 @@ set_string_field (DBusMessage *message,
len = strlen (old_value);
_dbus_string_init_const_len (&v, old_value,
len + 1); /* include nul */
len + 1); /* include nul */
if (!_dbus_marshal_set_string (&message->header,
message->byte_order,
offset, &v, len))
......@@ -741,7 +744,7 @@ set_string_field (DBusMessage *message,
}
dbus_free (old_value);
return TRUE;
failed:
......@@ -6553,12 +6556,16 @@ _dbus_message_test (const char *test_data_dir)
_dbus_assert (dbus_message_has_destination (message, "org.freedesktop.DBus.TestService"));
_dbus_assert (dbus_message_is_method_call (message, "Foo.TestInterface",
"TestMethod"));
_dbus_assert (strcmp (dbus_message_get_path (message),
"/org/freedesktop/TestPath") == 0);
_dbus_message_set_serial (message, 1234);
/* string length including nul byte not a multiple of 4 */
dbus_message_set_sender (message, "org.foo.bar1");
if (!dbus_message_set_sender (message, "org.foo.bar1"))
_dbus_assert_not_reached ("out of memory");
_dbus_assert (dbus_message_has_sender (message, "org.foo.bar1"));
dbus_message_set_reply_serial (message, 5678);
dbus_message_set_sender (message, NULL);
if (!dbus_message_set_sender (message, NULL))
_dbus_assert_not_reached ("out of memory");
_dbus_assert (!dbus_message_has_sender (message, "org.foo.bar1"));
_dbus_assert (dbus_message_get_serial (message) == 1234);
_dbus_assert (dbus_message_get_reply_serial (message) == 5678);
......@@ -6569,6 +6576,58 @@ _dbus_message_test (const char *test_data_dir)
_dbus_assert (dbus_message_get_no_reply (message) == TRUE);
dbus_message_set_no_reply (message, FALSE);
_dbus_assert (dbus_message_get_no_reply (message) == FALSE);
#if 0
/* Set/get some header fields */
if (!dbus_message_set_path (message, "/foo"))
_dbus_assert_not_reached ("out of memory");
_dbus_assert (strcmp (dbus_message_get_path (message),
"/foo") == 0);
if (!dbus_message_set_interface (message, "org.Foo"))
_dbus_assert_not_reached ("out of memory");
_dbus_assert (strcmp (dbus_message_get_interface (message),
"org.Foo") == 0);
if (!dbus_message_set_member (message, "Bar"))
_dbus_assert_not_reached ("out of memory");
_dbus_assert (strcmp (dbus_message_get_member (message),
"Bar") == 0);
/* Set/get them with longer values */
if (!dbus_message_set_path (message, "/foo/bar"))
_dbus_assert_not_reached ("out of memory");
_dbus_assert (strcmp (dbus_message_get_path (message),
"/foo/bar") == 0);
if (!dbus_message_set_interface (message, "org.Foo.Bar"))
_dbus_assert_not_reached ("out of memory");
_dbus_assert (strcmp (dbus_message_get_interface (message),
"org.Foo.Bar") == 0);
if (!dbus_message_set_member (message, "BarFoo"))
_dbus_assert_not_reached ("out of memory");
_dbus_assert (strcmp (dbus_message_get_member (message),
"BarFoo") == 0);
/* Realloc shorter again */
if (!dbus_message_set_path (message, "/foo"))
_dbus_assert_not_reached ("out of memory");
_dbus_assert (strcmp (dbus_message_get_path (message),
"/foo") == 0);
if (!dbus_message_set_interface (message, "org.Foo"))
_dbus_assert_not_reached ("out of memory");
_dbus_assert (strcmp (dbus_message_get_interface (message),
"org.Foo") == 0);
if (!dbus_message_set_member (message, "Bar"))
_dbus_assert_not_reached ("out of memory");
_dbus_assert (strcmp (dbus_message_get_member (message),
"Bar") == 0);
#endif
dbus_message_unref (message);
......
......@@ -3381,6 +3381,24 @@ _dbus_sysdeps_test (void)
exit (1);
}
_dbus_string_init_const (&str, "0xff");
if (!_dbus_string_parse_double (&str,
0, &val, &pos))
{
_dbus_warn ("Failed to parse double");
exit (1);
}
if (val != 0xff)
{
_dbus_warn ("Failed to parse 0xff correctly, got: %f", val);
exit (1);
}
if (pos != 4)
{
_dbus_warn ("_dbus_string_parse_double of \"0xff\" returned wrong position %d", pos);
exit (1);
}
check_path_absolute ("/", TRUE);
check_path_absolute ("/foo", TRUE);
check_path_absolute ("", FALSE);
......
- Message matching rules (so broadcasts can be filtered) need sorting
out.
- How we will handle DCOP needs sorting out. Among other things, we
need to check that service and service-ownership semantics map to DCOP
reasonably well.
......@@ -93,3 +90,6 @@
- add dbus_message_has_path(), maybe has_member/interface
- The OBJECT_PATH type is not documented in the spec.
- re_align_field_recurse() in dbus-message.c is broken because it
crashes on some types of header field values. security problem.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment