diff options
author | Aleksander Morgado <aleksandermj@chromium.org> | 2022-09-23 14:15:58 +0000 |
---|---|---|
committer | Aleksander Morgado <aleksandermj@chromium.org> | 2022-09-27 21:29:22 +0000 |
commit | 64d15cddddff44061d9280163853b8044912d251 (patch) | |
tree | efd8270f91c5cc2039e04f73236a1891e806b3b4 /src | |
parent | 43c544b2c48570eba70a617aa9ce2c414160509f (diff) | |
download | libmbim-64d15cddddff44061d9280163853b8044912d251.tar.gz |
libmbim-glib,proxy: use the new message validation operation
Diffstat (limited to 'src')
-rw-r--r-- | src/libmbim-glib/mbim-proxy.c | 24 |
1 files changed, 12 insertions, 12 deletions
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); } |