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-message-util.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) (limited to 'dbus/dbus-message-util.c') diff --git a/dbus/dbus-message-util.c b/dbus/dbus-message-util.c index c646ebf9..69db2019 100644 --- a/dbus/dbus-message-util.c +++ b/dbus/dbus-message-util.c @@ -78,6 +78,45 @@ dbus_message_iter_get_args (DBusMessageIter *iter, #include #include +static int validities_seen[DBUS_VALIDITY_LAST + _DBUS_NEGATIVE_VALIDITY_COUNT]; + +static void +reset_validities_seen (void) +{ + int i; + i = 0; + while (i < _DBUS_N_ELEMENTS (validities_seen)) + { + validities_seen[i] = 0; + ++i; + } +} + +static void +record_validity_seen (DBusValidity validity) +{ + validities_seen[validity + _DBUS_NEGATIVE_VALIDITY_COUNT] += 1; +} + +static void +print_validities_seen (dbus_bool_t not_seen) +{ + int i; + i = 0; + while (i < _DBUS_N_ELEMENTS (validities_seen)) + { + if ((i - _DBUS_NEGATIVE_VALIDITY_COUNT) == DBUS_VALIDITY_UNKNOWN || + (i - _DBUS_NEGATIVE_VALIDITY_COUNT) == DBUS_INVALID_FOR_UNKNOWN_REASON) + ; + else if ((not_seen && validities_seen[i] == 0) || + (!not_seen && validities_seen[i] > 0)) + printf ("validity %3d seen %d times\n", + i - _DBUS_NEGATIVE_VALIDITY_COUNT, + validities_seen[i]); + ++i; + } +} + static void check_memleaks (void) { @@ -130,6 +169,8 @@ check_have_valid_message (DBusMessageLoader *loader) goto failed; #endif + record_validity_seen (DBUS_VALID); + retval = TRUE; failed: @@ -153,6 +194,8 @@ check_invalid_message (DBusMessageLoader *loader, goto failed; } + record_validity_seen (loader->corruption_reason); + if (expected_validity != DBUS_INVALID_FOR_UNKNOWN_REASON && loader->corruption_reason != expected_validity) { @@ -190,6 +233,7 @@ check_incomplete_message (DBusMessageLoader *loader) goto failed; } + record_validity_seen (DBUS_VALID_BUT_INCOMPLETE); retval = TRUE; failed: @@ -212,8 +256,12 @@ check_loader_results (DBusMessageLoader *loader, else if (expected_validity == DBUS_VALIDITY_UNKNOWN) { /* here we just know we didn't segfault and that was the - * only test + * only test. Also, we record that we got coverage + * for the validity reason. */ + if (_dbus_message_loader_get_is_corrupted (loader)) + record_validity_seen (loader->corruption_reason); + return TRUE; } else @@ -1170,6 +1218,8 @@ _dbus_message_test (const char *test_data_dir) DBusMessageData mdata; int count; + reset_validities_seen (); + count = 0; _dbus_message_data_iter_init (&diter); @@ -1190,6 +1240,9 @@ _dbus_message_test (const char *test_data_dir) } printf ("%d sample messages tested\n", count); + + print_validities_seen (FALSE); + print_validities_seen (TRUE); } check_memleaks (); -- cgit