diff --git a/NEWS b/NEWS index 335986ed..c7a9c70b 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,16 @@ This file lists notable changes in each release. For the full history of all changes, see ChangeLog. +2020-12-01: v1.90.7 release + +Highlights: + * vfs5011: Fix possible use-after-free + * goodixmoc: Add two new PIDs (0x63AC, 0x639C) + * goodixmoc: Support finger status API + * synaptics: Only identify within provided prints + * synaptics: Reject devices with old firmware during probe (#239) + + 2020-12-01: v1.90.6 release This release is primarily a bugfix release for some older issues. diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c index bb0368b9..af64d814 100644 --- a/libfprint/drivers/goodixmoc/goodix.c +++ b/libfprint/drivers/goodixmoc/goodix.c @@ -53,6 +53,7 @@ struct _FpiDeviceGoodixMoc pgxfp_sensor_cfg_t sensorcfg; gint enroll_stage; gint max_enroll_stage; + gint max_stored_prints; GCancellable *cancellable; GPtrArray *list_result; guint8 template_id[TEMPLATE_ID_SIZE]; @@ -330,7 +331,9 @@ fp_verify_capture_cb (FpiDeviceGoodixMoc *self, fpi_device_retry_new (FP_DEVICE_RETRY_GENERAL)); return; } - + fpi_device_report_finger_status_changes (FP_DEVICE (self), + FP_FINGER_STATUS_PRESENT, + FP_FINGER_STATUS_NONE); if (resp->capture_data_resp.img_quality == 0) { fpi_ssm_mark_failed (self->task_ssm, @@ -341,6 +344,7 @@ fp_verify_capture_cb (FpiDeviceGoodixMoc *self, { fpi_ssm_mark_failed (self->task_ssm, fpi_device_retry_new (FP_DEVICE_RETRY_CENTER_FINGER)); + return; } fpi_ssm_next_state (self->task_ssm); } @@ -433,6 +437,9 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) switch (fpi_ssm_get_cur_state (ssm)) { case FP_VERIFY_CAPTURE: + fpi_device_report_finger_status_changes (device, + FP_FINGER_STATUS_NEEDED, + FP_FINGER_STATUS_NONE); goodix_sensor_cmd (self, MOC_CMD0_CAPTURE_DATA, MOC_CMD1_DEFAULT, true, (const guint8 *) ¶m, @@ -560,6 +567,13 @@ fp_enroll_enum_cb (FpiDeviceGoodixMoc *self, resp->result)); return; } + if (resp->finger_list_resp.finger_num >= self->max_stored_prints) + { + fpi_ssm_mark_failed (self->task_ssm, + fpi_device_error_new (FP_DEVICE_ERROR_DATA_FULL)); + return; + } + fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE); } @@ -620,7 +634,9 @@ fp_enroll_capture_cb (FpiDeviceGoodixMoc *self, fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE); return; } - + fpi_device_report_finger_status_changes (FP_DEVICE (self), + FP_FINGER_STATUS_PRESENT, + FP_FINGER_STATUS_NONE); if ((resp->capture_data_resp.img_quality < self->sensorcfg->config[4]) || (resp->capture_data_resp.img_coverage < self->sensorcfg->config[5])) { @@ -742,7 +758,7 @@ fp_finger_mode_cb (FpiDeviceGoodixMoc *self, fpi_ssm_mark_failed (self->task_ssm, error); return; } - /* if reach max timeout(5sec) finger not up, swtich to finger up again */ + /* if reach max timeout(5sec) finger not up, switch to finger up again */ if (resp->finger_status.status == GX_ERROR_WAIT_FINGER_UP_TIMEOUT) { fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_WAIT_FINGER_UP); @@ -755,6 +771,9 @@ fp_finger_mode_cb (FpiDeviceGoodixMoc *self, "Switch finger mode failed")); return; } + fpi_device_report_finger_status_changes (FP_DEVICE (self), + FP_FINGER_STATUS_NONE, + FP_FINGER_STATUS_PRESENT); if (self->enroll_stage < self->max_enroll_stage) { fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE); @@ -817,6 +836,9 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) break; case FP_ENROLL_CAPTURE: + fpi_device_report_finger_status_changes (device, + FP_FINGER_STATUS_NEEDED, + FP_FINGER_STATUS_NONE); goodix_sensor_cmd (self, MOC_CMD0_CAPTURE_DATA, MOC_CMD1_DEFAULT, true, (const guint8 *) &dummy, @@ -975,7 +997,7 @@ fp_init_config_cb (FpiDeviceGoodixMoc *self, fpi_ssm_mark_failed (self->task_ssm, error); return; } - + self->max_stored_prints = resp->finger_config.max_stored_prints; fpi_ssm_next_state (self->task_ssm); } @@ -1259,6 +1281,8 @@ gx_fp_init (FpDevice *device) GError *error = NULL; int ret = 0; + self->max_stored_prints = FP_MAX_FINGERNUM; + self->cancellable = g_cancellable_new (); self->sensorcfg = g_new0 (gxfp_sensor_cfg_t, 1); @@ -1424,6 +1448,8 @@ static const FpIdEntry id_table[] = { { .vid = 0x27c6, .pid = 0x5840, }, { .vid = 0x27c6, .pid = 0x6496, }, { .vid = 0x27c6, .pid = 0x60A2, }, + { .vid = 0x27c6, .pid = 0x63AC, }, + { .vid = 0x27c6, .pid = 0x639C, }, { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ }; diff --git a/libfprint/drivers/goodixmoc/goodix_proto.c b/libfprint/drivers/goodixmoc/goodix_proto.c index ece8123d..e30d23df 100644 --- a/libfprint/drivers/goodixmoc/goodix_proto.c +++ b/libfprint/drivers/goodixmoc/goodix_proto.c @@ -294,6 +294,12 @@ gx_proto_parse_body (uint16_t cmd, uint8_t *buffer, uint32_t buffer_len, pgxfp_c break; case MOC_CMD0_UPDATE_CONFIG: + { + presp->finger_config.status = buffer[0]; + presp->finger_config.max_stored_prints = buffer[2]; + } + break; + case MOC_CMD0_COMMITENROLLMENT: case MOC_CMD0_DELETETEMPLATE: break; @@ -411,7 +417,7 @@ gx_proto_init_sensor_config (pgxfp_sensor_cfg_t pconfig) memset (pconfig, 0, sizeof (*pconfig)); //NOTICE: Do not change any value! - memcpy (&pconfig->config, sensor_config, 26); + memcpy (&pconfig->config, sensor_config, G_N_ELEMENTS (sensor_config)); pconfig->reserved[0] = 1; gx_proto_crc32_calc ((uint8_t *) pconfig, sizeof (*pconfig) - PACKAGE_CRC_SIZE, (uint8_t *) &crc32_calc); diff --git a/libfprint/drivers/goodixmoc/goodix_proto.h b/libfprint/drivers/goodixmoc/goodix_proto.h index 1611a601..53eea046 100644 --- a/libfprint/drivers/goodixmoc/goodix_proto.h +++ b/libfprint/drivers/goodixmoc/goodix_proto.h @@ -25,7 +25,7 @@ #define PACKAGE_CRC_SIZE (4) #define PACKAGE_HEADER_SIZE (8) -#define FP_MAX_FINGERNUM (10) +#define FP_MAX_FINGERNUM (20) #define TEMPLATE_ID_SIZE (32) @@ -167,6 +167,11 @@ typedef struct _fp_finger_status uint8_t status; } fp_finger_status_t, *pfp_finger_status_t; +typedef struct _fp_finger_config +{ + uint8_t status; + uint8_t max_stored_prints; +} fp_finger_config_t, *pfp_finger_config_t; typedef struct _fp_cmd_response { @@ -183,6 +188,7 @@ typedef struct _fp_cmd_response gxfp_enum_fingerlist_t finger_list_resp; gxfp_version_info_t version_info; fp_finger_status_t finger_status; + fp_finger_config_t finger_config; }; } gxfp_cmd_response_t, *pgxfp_cmd_response_t; diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c index 934a271e..b4711faf 100644 --- a/libfprint/drivers/synaptics/synaptics.c +++ b/libfprint/drivers/synaptics/synaptics.c @@ -27,6 +27,9 @@ G_DEFINE_TYPE (FpiDeviceSynaptics, fpi_device_synaptics, FP_TYPE_DEVICE) +static void init_identify_msg (FpDevice *device); +static void compose_and_send_identify_msg (FpDevice *device); + static const FpIdEntry id_table[] = { { .vid = SYNAPTICS_VENDOR_ID, .pid = 0xBD, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0xE9, }, @@ -121,7 +124,7 @@ cmd_receive_cb (FpiUsbTransfer *transfer, { if (resp.response_id == BMKT_RSP_CANCEL_OP_OK) { - fp_dbg ("Received cancellation success resonse"); + fp_dbg ("Received cancellation success response"); fpi_ssm_mark_failed (transfer->ssm, g_error_new_literal (G_IO_ERROR, G_IO_ERROR_CANCELLED, @@ -451,6 +454,37 @@ parse_print_data (GVariant *data, return TRUE; } +static FpPrint * +create_print (FpiDeviceSynaptics *self, + guint8 *user_id, + guint8 finger_id) +{ + FpPrint *print; + g_autofree gchar *user_id_safe; + GVariant *data = NULL; + GVariant *uid = NULL; + + user_id_safe = g_strndup ((char *) user_id, BMKT_MAX_USER_ID_LEN); + + print = fp_print_new (FP_DEVICE (self)); + uid = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, + user_id_safe, + strlen (user_id_safe), + 1); + data = g_variant_new ("(y@ay)", + finger_id, + uid); + + fpi_print_set_type (print, FPI_PRINT_RAW); + fpi_print_set_device_stored (print, TRUE); + g_object_set (print, "fpi-data", data, NULL); + g_object_set (print, "description", user_id_safe, NULL); + + fpi_print_fill_from_user_id (print, user_id_safe); + + return print; +} + static void list_msg_cb (FpiDeviceSynaptics *self, bmkt_response_t *resp, @@ -503,10 +537,7 @@ list_msg_cb (FpiDeviceSynaptics *self, for (int n = 0; n < BMKT_MAX_NUM_TEMPLATES_INTERNAL_FLASH; n++) { - GVariant *data = NULL; - GVariant *uid = NULL; FpPrint *print; - gchar *userid; if (get_enroll_templates_resp->templates[n].user_id_len == 0) continue; @@ -519,23 +550,9 @@ list_msg_cb (FpiDeviceSynaptics *self, get_enroll_templates_resp->templates[n].user_id, get_enroll_templates_resp->templates[n].finger_id); - userid = (gchar *) get_enroll_templates_resp->templates[n].user_id; - - print = fp_print_new (FP_DEVICE (self)); - uid = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, - get_enroll_templates_resp->templates[n].user_id, - get_enroll_templates_resp->templates[n].user_id_len, - 1); - data = g_variant_new ("(y@ay)", - get_enroll_templates_resp->templates[n].finger_id, - uid); - - fpi_print_set_type (print, FPI_PRINT_RAW); - fpi_print_set_device_stored (print, TRUE); - g_object_set (print, "fpi-data", data, NULL); - g_object_set (print, "description", get_enroll_templates_resp->templates[n].user_id, NULL); - - fpi_print_fill_from_user_id (print, userid); + print = create_print (self, + get_enroll_templates_resp->templates[n].user_id, + get_enroll_templates_resp->templates[n].finger_id); g_ptr_array_add (self->list_result, g_object_ref_sink (print)); } @@ -649,7 +666,7 @@ verify_msg_cb (FpiDeviceSynaptics *self, fp_info ("Verify was successful! for user: %s finger: %d score: %f", verify_resp->user_id, verify_resp->finger_id, verify_resp->match_result); fpi_device_verify_report (device, FPI_MATCH_SUCCESS, NULL, NULL); - fpi_device_verify_complete (device, NULL); + verify_complete_after_finger_removal (self); break; } } @@ -725,6 +742,12 @@ identify_msg_cb (FpiDeviceSynaptics *self, fp_info ("Place Finger on the Sensor!"); break; + case BMKT_RSP_SEND_NEXT_USER_ID: + { + compose_and_send_identify_msg (device); + break; + } + case BMKT_RSP_ID_FAIL: if (resp->result == BMKT_SENSOR_STIMULUS_ERROR) { @@ -760,45 +783,47 @@ identify_msg_cb (FpiDeviceSynaptics *self, FpPrint *print = NULL; GPtrArray *prints = NULL; g_autoptr(GVariant) data = NULL; - guint8 finger; - const guint8 *user_id; - gsize user_id_len = 0; - gint cnt = 0; - gboolean find = FALSE; + gboolean found = FALSE; + guint index; + + print = create_print (self, + resp->response.id_resp.user_id, + resp->response.id_resp.finger_id); fpi_device_get_identify_data (device, &prints); - for (cnt = 0; cnt < prints->len; cnt++) - { - print = g_ptr_array_index (prints, cnt); - g_object_get (print, "fpi-data", &data, NULL); - g_debug ("data is %p", data); - parse_print_data (data, &finger, &user_id, &user_id_len); - if (user_id) - { - if (memcmp (resp->response.id_resp.user_id, user_id, user_id_len) == 0) - { - find = TRUE; - break; - } - } - } - if(find) - { - fpi_device_identify_report (device, print, print, NULL); - fpi_device_identify_complete (device, NULL); - } + found = g_ptr_array_find_with_equal_func (prints, + print, + (GEqualFunc) fp_print_equal, + &index); + + if (found) + fpi_device_identify_report (device, g_ptr_array_index (prints, index), print, NULL); else - { - fpi_device_identify_report (device, NULL, NULL, NULL); - identify_complete_after_finger_removal (self); - } + fpi_device_identify_report (device, NULL, print, NULL); + + identify_complete_after_finger_removal (self); } } } static void identify (FpDevice *device) +{ + init_identify_msg (device); + compose_and_send_identify_msg (device); +} + +static void +init_identify_msg (FpDevice *device) +{ + FpiDeviceSynaptics *self = FPI_DEVICE_SYNAPTICS (device); + + self->id_idx = 0; +} + +static void +compose_and_send_identify_msg (FpDevice *device) { FpiDeviceSynaptics *self = FPI_DEVICE_SYNAPTICS (device); FpPrint *print = NULL; @@ -808,28 +833,77 @@ identify (FpDevice *device) guint8 finger; const guint8 *user_id; gsize user_id_len = 0; - gint cnt = 0; + g_autofree guint8 *payload = NULL; + guint8 payload_len = 0; + guint8 payloadOffset = 0; fpi_device_get_identify_data (device, &prints); - - for (cnt = 0; cnt < prints->len; cnt++) + if (prints->len > UINT8_MAX) { - print = g_ptr_array_index (prints, cnt); - g_object_get (print, "fpi-data", &data, NULL); - g_debug ("data is %p", data); - if (!parse_print_data (data, &finger, &user_id, &user_id_len)) - { - fpi_device_identify_complete (device, - fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID)); - return; - } + fpi_device_identify_complete (device, + fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID)); + return; } - G_DEBUG_HERE (); + if(self->id_idx >= prints->len) + { + fp_warn ("Device asked for more prints than we are providing."); + fpi_device_identify_complete (device, + fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO, + "Unexpected index")); + return; + } + print = g_ptr_array_index (prints, self->id_idx); + g_object_get (print, "fpi-data", &data, NULL); + g_debug ("data is %p", data); + if (!parse_print_data (data, &finger, &user_id, &user_id_len)) + { + fpi_device_identify_complete (device, + fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID)); + return; + } + if(self->id_idx == 0) + { + /* + * Construct payload. + * 1st byte is total number of IDs in list. + * 2nd byte is number of IDs in list. + * 1 byte for each ID length, maximum id length is 100. + * user_id_len bytes of each ID + */ + payload_len = 2 + 1 + user_id_len; + payload = g_malloc0 (payload_len); + payload[payloadOffset] = prints->len; + payloadOffset += 1; + payload[payloadOffset] = 1; /* send one id per message */ + payloadOffset += 1; + payload[payloadOffset] = user_id_len; + payloadOffset += 1; + memcpy (&payload[payloadOffset], user_id, user_id_len); + payloadOffset += user_id_len; - synaptics_sensor_cmd (self, 0, BMKT_CMD_ID_USER, NULL, 0, identify_msg_cb); + G_DEBUG_HERE (); + + synaptics_sensor_cmd (self, 0, BMKT_CMD_ID_USER_IN_ORDER, payload, payloadOffset, identify_msg_cb); + } + else + { + /* + * 1st byte is the number of IDs + * 1 byte for each ID length + * id_length bytes for each ID + */ + payload_len = 1 + 1 + user_id_len; + payload = g_malloc0 (payload_len); + payload[payloadOffset] = 1; /* send one id per message */ + payloadOffset += 1; + payload[payloadOffset] = user_id_len; + payloadOffset += 1; + memcpy (&payload[payloadOffset], user_id, user_id_len); + payloadOffset += user_id_len; + synaptics_sensor_cmd (self, self->cmd_seq_num, BMKT_CMD_ID_NEXT_USER, payload, payloadOffset, NULL); + } + self->id_idx++; } - - static void enroll_msg_cb (FpiDeviceSynaptics *self, bmkt_response_t *resp, @@ -1059,6 +1133,44 @@ delete_print (FpDevice *device) synaptics_sensor_cmd (self, 0, BMKT_CMD_DEL_USER_FP, payload, user_id_len + 1, delete_msg_cb); } +static void +prob_msg_cb (FpiDeviceSynaptics *self, + bmkt_response_t *resp, + GError *error) +{ + GUsbDevice *usb_dev = NULL; + g_autofree gchar *serial = NULL; + + usb_dev = fpi_device_get_usb_device (FP_DEVICE (self)); + + if (error) + { + g_usb_device_close (usb_dev, NULL); + fpi_device_probe_complete (FP_DEVICE (self), NULL, NULL, + fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL, "unsupported firmware version")); + return; + } + + if (g_strcmp0 (g_getenv ("FP_DEVICE_EMULATION"), "1") == 0) + serial = g_strdup ("emulated-device"); + else + serial = g_usb_device_get_string_descriptor (usb_dev, + g_usb_device_get_serial_number_index (usb_dev), + &error); + + if (resp->result == BMKT_SUCCESS) + { + g_usb_device_close (usb_dev, NULL); + fpi_device_probe_complete (FP_DEVICE (self), serial, NULL, error); + } + else + { + g_warning ("Probe fingerprint sensor failed with %d!", resp->result); + g_usb_device_close (usb_dev, NULL); + fpi_device_probe_complete (FP_DEVICE (self), serial, NULL, fpi_device_error_new (FP_DEVICE_ERROR_GENERAL)); + } +} + static void dev_probe (FpDevice *device) { @@ -1159,40 +1271,7 @@ dev_probe (FpDevice *device) fp_dbg ("Target: %d", self->mis_version.target); fp_dbg ("Product: %d", self->mis_version.product); - - /* We need at least firmware version 10.1, and for 10.1 build 2989158 */ - if (self->mis_version.version_major < 10 || - self->mis_version.version_minor < 1 || - (self->mis_version.version_major == 10 && - self->mis_version.version_minor == 1 && - self->mis_version.build_num < 2989158)) - { - fp_warn ("Firmware version %d.%d with build number %d is unsupported", - self->mis_version.version_major, - self->mis_version.version_minor, - self->mis_version.build_num); - - error = fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL, - "Unsupported firmware version " - "(%d.%d with build number %d)", - self->mis_version.version_major, - self->mis_version.version_minor, - self->mis_version.build_num); - goto err_close; - } - - /* This is the same as the serial_number from above, hex encoded and somewhat reordered */ - /* Should we add in more, e.g. the chip revision? */ - if (g_strcmp0 (g_getenv ("FP_DEVICE_EMULATION"), "1") == 0) - serial = g_strdup ("emulated-device"); - else - serial = g_usb_device_get_string_descriptor (usb_dev, - g_usb_device_get_serial_number_index (usb_dev), - &error); - - g_usb_device_close (usb_dev, NULL); - - fpi_device_probe_complete (device, serial, NULL, error); + synaptics_sensor_cmd (self, 0, BMKT_CMD_FPS_INIT, NULL, 0, prob_msg_cb); return; diff --git a/libfprint/drivers/synaptics/synaptics.h b/libfprint/drivers/synaptics/synaptics.h index ac50171b..deb3a224 100644 --- a/libfprint/drivers/synaptics/synaptics.h +++ b/libfprint/drivers/synaptics/synaptics.h @@ -110,6 +110,7 @@ struct _FpiDeviceSynaptics FpiSsm *cmd_ssm; FpiUsbTransfer *cmd_pending_transfer; gboolean cmd_complete_on_removal; + guint8 id_idx; bmkt_sensor_version_t mis_version; diff --git a/libfprint/drivers/vfs5011.c b/libfprint/drivers/vfs5011.c index ffc06803..c1e684c1 100644 --- a/libfprint/drivers/vfs5011.c +++ b/libfprint/drivers/vfs5011.c @@ -815,13 +815,11 @@ dev_close (FpImageDevice *dev) GError *error = NULL; FpDeviceVfs5011 *self = FPI_DEVICE_VFS5011 (dev); - ; - g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (dev)), 0, 0, &error); g_free (self->capture_buffer); - g_slist_free_full (self->rows, g_free); + g_slist_free_full (g_steal_pointer (&self->rows), g_free); fpi_image_device_close_complete (dev, error); } diff --git a/libfprint/fp-device.c b/libfprint/fp-device.c index 6db665fa..f752a487 100644 --- a/libfprint/fp-device.c +++ b/libfprint/fp-device.c @@ -792,7 +792,7 @@ fp_device_close_finish (FpDevice *device, * in. The driver may make use of this metadata, when e.g. storing the print on * device memory. It is undefined whether this print is filled in by the driver * and returned, or whether the driver will return a newly created print after - * enrollment successed. + * enrollment succeeded. */ void fp_device_enroll (FpDevice *device, diff --git a/libfprint/fpi-device.c b/libfprint/fpi-device.c index 0968c0c1..de511920 100644 --- a/libfprint/fpi-device.c +++ b/libfprint/fpi-device.c @@ -760,7 +760,7 @@ fp_device_task_return_in_idle_cb (gpointer user_data) g_task_return_error (task, fpi_device_error_new (FP_DEVICE_ERROR_REMOVED)); /* NOTE: The removed signal will be emitted from the GTask - * notify::completed if that is neccessary. */ + * notify::completed if that is necessary. */ return G_SOURCE_REMOVE; } diff --git a/libfprint/fpi-ssm.c b/libfprint/fpi-ssm.c index 3cc39a7f..25728d18 100644 --- a/libfprint/fpi-ssm.c +++ b/libfprint/fpi-ssm.c @@ -74,7 +74,7 @@ * upon success (or fails). * * Your completion callback should examine the return value of - * fpi_ssm_get_error() in ordater to determine whether the #FpiSsm completed or + * fpi_ssm_get_error() in order to determine whether the #FpiSsm completed or * failed. An error code of zero indicates successful completion. */ diff --git a/libfprint/meson.build b/libfprint/meson.build index 96cfe9b5..4d1d30cc 100644 --- a/libfprint/meson.build +++ b/libfprint/meson.build @@ -234,6 +234,8 @@ libnbis = static_library('nbis', '-Wno-error=redundant-decls', '-Wno-redundant-decls', '-Wno-discarded-qualifiers', + '-Wno-array-bounds', + '-Wno-array-parameter', ]), install: false) diff --git a/meson.build b/meson.build index a2b849b1..139c571c 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('libfprint', [ 'c', 'cpp' ], - version: '1.90.6', + version: '1.90.7', license: 'LGPLv2.1+', default_options: [ 'buildtype=debugoptimized', diff --git a/tests/README.md b/tests/README.md index 8a70ba12..9eac6a4b 100644 --- a/tests/README.md +++ b/tests/README.md @@ -27,7 +27,7 @@ A new 'capture' test is created by means of `capture.py` script: - `export LD_PRELOAD=/libfprint/libfprint-2.so` - `export GI_TYPELIB_PATH=/libfprint` - Also, sometimes the driver must be adopted to the emulated environment + Also, sometimes the driver must be adapted to the emulated environment (mainly if it uses random numbers, see `synaptics.c` for an example). Set the following environment variable to enable this adaptation: - `export FP_DEVICE_EMULATION=1` @@ -41,6 +41,11 @@ A new 'capture' test is created by means of `capture.py` script: The following USB device is used in the example above: `/dev/bus/usb/001/005`. + For the following commands, it is assumed that the user that's + running the commands has full access to the device node, whether + by running the commands as `root`, or changing the permissions for + that device node. + 4. Record information about this device: `umockdev-record /dev/bus/usb/001/005 > DRIVER/device` diff --git a/tests/goodixmoc/custom.py b/tests/goodixmoc/custom.py index 57faf6c5..17f35622 100755 --- a/tests/goodixmoc/custom.py +++ b/tests/goodixmoc/custom.py @@ -20,6 +20,7 @@ d.open_sync() template = FPrint.Print.new(d) def enroll_progress(*args): + assert d.get_finger_status() == FPrint.FingerStatusFlags.NEEDED print('enroll progress: ' + str(args)) def identify_done(dev, res): @@ -31,7 +32,9 @@ def identify_done(dev, res): # List, enroll, list, verify, identify, delete print("enrolling") +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE p = d.enroll_sync(template, None, enroll_progress, None) +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE print("enroll done") print("listing") @@ -40,7 +43,9 @@ print("listing done") assert len(stored) == 1 assert stored[0].equal(p) print("verifying") +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE verify_res, verify_print = d.verify_sync(p) +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE print("verify done") del p assert verify_res == True diff --git a/tests/synaptics/custom.ioctl b/tests/synaptics/custom.ioctl index 370a8e07..e2ea71f1 100644 --- a/tests/synaptics/custom.ioctl +++ b/tests/synaptics/custom.ioctl @@ -4,14 +4,16 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 01 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 40 38 0 00009C37FE5C669C2D000A01014101C10000D11BB7134A090FA1000000000100000000000003 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE011100 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE01130100 -USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302D302D30303030303030302D6E6F626F6479 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE025400 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE021100 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02130100 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE03512000014650312D30303030303030302D302D30303030303030302D6E6F626F6479 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE035400 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 @@ -20,13 +22,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0255010C + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0355010C USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 @@ -35,19 +37,19 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02550119 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE03550119 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02550125 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE03550125 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 @@ -56,13 +58,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02550125 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE03550125 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 @@ -71,13 +73,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02550132 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE03550132 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 @@ -86,13 +88,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0255013E + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0355013E USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 @@ -101,13 +103,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0255013E + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0355013E USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 @@ -116,13 +118,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0255014B + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0355014B USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 @@ -131,7 +133,7 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 @@ -140,13 +142,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02550157 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE03550157 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 @@ -155,21 +157,21 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02550164 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE03550164 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 37 0 0000FE02591F014650312D30303030303030302D302D30303030303030302D6E6F626F6479 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 37 0 0000FE03591F014650312D30303030303030302D302D30303030303030302D6E6F626F6479 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 -USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE037100 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 41 0 0000FE03752301012007014650312D30303030303030302D302D30303030303030302D6E6F626F6479 -USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE037200 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE037600 -USBDEVFS_REAPURBNDELAY 0 3 1 0 0 35 35 0 A7FE04651E4650312D30303030303030302D302D30303030303030302D6E6F626F6479 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE046600 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE047100 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 41 0 0000FE04752301012007014650312D30303030303030302D302D30303030303030302D6E6F626F6479 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE047200 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE047600 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 35 35 0 A7FE05651E4650312D30303030303030302D302D30303030303030302D6E6F626F6479 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE056600 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE046000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE056000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 @@ -178,9 +180,9 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 35 35 0 A7FE04651E4650312D30303030303030302D302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 39 0 0000FE0468214F2B014650312D30303030303030302D302D30303030303030302D6E6F626F6479 -USBDEVFS_REAPURBNDELAY 0 3 1 0 0 36 36 0 A7FE05811F014650312D30303030303030302D302D30303030303030302D6E6F626F6479 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 37 0 0000FE05831F014650312D30303030303030302D302D30303030303030302D6E6F626F6479 -USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE06A100 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE06A200 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 39 0 0000FE0568214F2B014650312D30303030303030302D302D30303030303030302D6E6F626F6479 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 36 36 0 A7FE06811F014650312D30303030303030302D302D30303030303030302D6E6F626F6479 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 37 0 0000FE06831F014650312D30303030303030302D302D30303030303030302D6E6F626F6479 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE07A100 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE07A200 diff --git a/tests/test-fp-context.c b/tests/test-fp-context.c index 1dd1f727..156e6d47 100644 --- a/tests/test-fp-context.c +++ b/tests/test-fp-context.c @@ -287,7 +287,7 @@ test_context_remove_device_opening (void) g_assert_true (removed); g_assert_null (tctx->user_data); - /* Running the mainloop now will cause the open to *succeed* dispite removal! */ + /* Running the mainloop now will cause the open to *succeed* despite removal! */ while (!open_done) g_main_context_iteration (NULL, TRUE);