From 64d15cddddff44061d9280163853b8044912d251 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Fri, 23 Sep 2022 14:15:58 +0000 Subject: libmbim-glib,proxy: use the new message validation operation --- src/libmbim-glib/mbim-proxy.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/libmbim-glib/mbim-proxy.c b/src/libmbim-glib/mbim-proxy.c index 50b15c3..be7f346 100644 --- a/src/libmbim-glib/mbim-proxy.c +++ b/src/libmbim-glib/mbim-proxy.c @@ -1191,22 +1191,22 @@ parse_request (MbimProxy *self, { do { g_autoptr(MbimMessage) message = NULL; - guint32 len = 0; - - if (client->buffer->len >= sizeof (struct header) && - (len = GUINT32_FROM_LE (((struct header *)client->buffer->data)->length)) > client->buffer->len) { - /* have not received complete message */ + g_autoptr(GError) error = NULL; + + /* Invalid message? */ + if (!mbim_message_validate ((const MbimMessage *)client->buffer, &error)) { + /* No full message yet */ + if (g_error_matches (error, MBIM_CORE_ERROR, MBIM_CORE_ERROR_INCOMPLETE_MESSAGE)) + return; + /* Invalid message */ + g_byte_array_remove_range (client->buffer, 0, client->buffer->len); return; } - if (!len) - return; - - message = mbim_message_new (client->buffer->data, len); - if (!message) - return; + message = mbim_message_dup ((const MbimMessage *)client->buffer); + g_assert (message); - g_byte_array_remove_range (client->buffer, 0, len); + g_byte_array_remove_range (client->buffer, 0, mbim_message_get_message_length (message)); process_message (self, client, message); } while (client->buffer->len > 0); } -- cgit v1.2.1