From 28c26c7d7e8ab03898a54352c4ae82c357373812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Tue, 20 Feb 2024 05:04:52 +0100 Subject: [PATCH] egismoc: Use FpiByteReader to read the enrolled IDs --- libfprint/drivers/egismoc/egismoc.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/libfprint/drivers/egismoc/egismoc.c b/libfprint/drivers/egismoc/egismoc.c index 00e922b3..4bf4fdae 100644 --- a/libfprint/drivers/egismoc/egismoc.c +++ b/libfprint/drivers/egismoc/egismoc.c @@ -457,17 +457,29 @@ egismoc_list_fill_enrolled_ids_cb (FpDevice *device, g_clear_pointer (&self->enrolled_ids, g_ptr_array_unref); self->enrolled_ids = g_ptr_array_new_with_free_func (g_free); + FpiByteReader reader; + gboolean read = TRUE; + + fpi_byte_reader_init (&reader, buffer_in, length_in); + + read &= fpi_byte_reader_set_pos (&reader, EGISMOC_LIST_RESPONSE_PREFIX_SIZE); + /* * Each fingerprint ID will be returned in this response as a 32 byte array * The other stuff in the payload is 16 bytes long, so if there is at least 1 * print then the length should be at least 16+32=48 bytes long */ - for (int pos = EGISMOC_LIST_RESPONSE_PREFIX_SIZE; - pos < length_in - EGISMOC_LIST_RESPONSE_SUFFIX_SIZE; - pos += EGISMOC_FINGERPRINT_DATA_SIZE) + while (read) { - g_autofree gchar *print_id = g_strndup ((gchar *) buffer_in + pos, - EGISMOC_FINGERPRINT_DATA_SIZE); + const guint8 *data; + g_autofree gchar *print_id = NULL; + + read &= fpi_byte_reader_get_data (&reader, EGISMOC_FINGERPRINT_DATA_SIZE, + &data); + if (!read) + break; + + print_id = g_strndup ((gchar *) data, EGISMOC_FINGERPRINT_DATA_SIZE); fp_dbg ("Device fingerprint %0d: %.*s", self->enrolled_ids->len + 1, EGISMOC_FINGERPRINT_DATA_SIZE, print_id); g_ptr_array_add (self->enrolled_ids, g_steal_pointer (&print_id));