mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-23 04:36:17 +01:00
tests: Add test cases for truncated D-Bus messages
(Minor code formatting tweaks and leak fixes by Philip Withnall.) Helps: #2528
This commit is contained in:
parent
4b9a27a868
commit
c58be7d569
@ -1472,6 +1472,67 @@ test_message_parse_deep_body_nesting (void)
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_message_parse_truncated (void)
|
||||||
|
{
|
||||||
|
GDBusMessage *message = NULL;
|
||||||
|
GDBusMessage *message2 = NULL;
|
||||||
|
GVariantBuilder builder;
|
||||||
|
guchar *blob = NULL;
|
||||||
|
gsize size = 0;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
g_test_summary ("Test that truncated messages are properly rejected.");
|
||||||
|
g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/2528");
|
||||||
|
|
||||||
|
message = g_dbus_message_new ();
|
||||||
|
g_variant_builder_init (&builder, G_VARIANT_TYPE ("(asbynqiuxtd)"));
|
||||||
|
g_variant_builder_open (&builder, G_VARIANT_TYPE ("as"));
|
||||||
|
g_variant_builder_add (&builder, "s", "fourtytwo");
|
||||||
|
g_variant_builder_close (&builder);
|
||||||
|
g_variant_builder_add (&builder, "b", TRUE);
|
||||||
|
g_variant_builder_add (&builder, "y", 42);
|
||||||
|
g_variant_builder_add (&builder, "n", 42);
|
||||||
|
g_variant_builder_add (&builder, "q", 42);
|
||||||
|
g_variant_builder_add (&builder, "i", 42);
|
||||||
|
g_variant_builder_add (&builder, "u", 42);
|
||||||
|
g_variant_builder_add (&builder, "x", 42);
|
||||||
|
g_variant_builder_add (&builder, "t", 42);
|
||||||
|
g_variant_builder_add (&builder, "d", (gdouble) 42);
|
||||||
|
|
||||||
|
g_dbus_message_set_message_type (message, G_DBUS_MESSAGE_TYPE_METHOD_CALL);
|
||||||
|
g_dbus_message_set_header (message, G_DBUS_MESSAGE_HEADER_FIELD_PATH,
|
||||||
|
g_variant_new_object_path ("/foo/bar"));
|
||||||
|
g_dbus_message_set_header (message, G_DBUS_MESSAGE_HEADER_FIELD_MEMBER,
|
||||||
|
g_variant_new_string ("Member"));
|
||||||
|
g_dbus_message_set_body (message, g_variant_builder_end (&builder));
|
||||||
|
|
||||||
|
blob = g_dbus_message_to_blob (message, &size, G_DBUS_CAPABILITY_FLAGS_NONE, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
|
||||||
|
g_clear_object (&message);
|
||||||
|
|
||||||
|
/* 12 bytes is the minimum size of the D-Bus message header. Anything less
|
||||||
|
* than that is rejected as a programming error by
|
||||||
|
* g_dbus_message_new_from_blob(). */
|
||||||
|
for (gsize i = 12; i < size; i++)
|
||||||
|
{
|
||||||
|
message2 = g_dbus_message_new_from_blob (blob, i, G_DBUS_CAPABILITY_FLAGS_NONE, &error);
|
||||||
|
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT);
|
||||||
|
g_assert_null (message2);
|
||||||
|
g_clear_error (&error);
|
||||||
|
}
|
||||||
|
|
||||||
|
message2 = g_dbus_message_new_from_blob (blob, size, G_DBUS_CAPABILITY_FLAGS_NONE, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_true (G_IS_DBUS_MESSAGE (message2));
|
||||||
|
g_clear_object (&message2);
|
||||||
|
|
||||||
|
g_free (blob);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc,
|
main (int argc,
|
||||||
char *argv[])
|
char *argv[])
|
||||||
@ -1506,6 +1567,8 @@ main (int argc,
|
|||||||
test_message_parse_deep_header_nesting);
|
test_message_parse_deep_header_nesting);
|
||||||
g_test_add_func ("/gdbus/message-parse/deep-body-nesting",
|
g_test_add_func ("/gdbus/message-parse/deep-body-nesting",
|
||||||
test_message_parse_deep_body_nesting);
|
test_message_parse_deep_body_nesting);
|
||||||
|
g_test_add_func ("/gdbus/message-parse/truncated",
|
||||||
|
test_message_parse_truncated);
|
||||||
|
|
||||||
return g_test_run();
|
return g_test_run();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user