summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2022-09-23 14:15:58 +0000
committerAleksander Morgado <aleksandermj@chromium.org>2022-09-27 21:29:22 +0000
commit64d15cddddff44061d9280163853b8044912d251 (patch)
treeefd8270f91c5cc2039e04f73236a1891e806b3b4 /src
parent43c544b2c48570eba70a617aa9ce2c414160509f (diff)
downloadlibmbim-64d15cddddff44061d9280163853b8044912d251.tar.gz
libmbim-glib,proxy: use the new message validation operation
Diffstat (limited to 'src')
-rw-r--r--src/libmbim-glib/mbim-proxy.c24
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);
}