diff --git a/libfprint/drivers/virtual-device.c b/libfprint/drivers/virtual-device.c index ca658dd9..6a321f64 100644 --- a/libfprint/drivers/virtual-device.c +++ b/libfprint/drivers/virtual-device.c @@ -558,6 +558,16 @@ dev_enroll (FpDevice *dev) GVariant *data; gboolean completed; + if (self->prints_storage && g_hash_table_contains (self->prints_storage, id)) + { + if (should_wait_to_sleep (self, id, error)) + return; + + fpi_device_enroll_complete (dev, NULL, + fpi_device_error_new (FP_DEVICE_ERROR_DATA_DUPLICATE)); + return; + } + if (self->enroll_stages_passed == 0) { fpi_print_set_type (print, FPI_PRINT_RAW); diff --git a/tests/virtual-device.py b/tests/virtual-device.py index 949a6c99..a6ae787d 100644 --- a/tests/virtual-device.py +++ b/tests/virtual-device.py @@ -613,6 +613,13 @@ class VirtualDeviceStorage(VirtualDevice): self.assertFalse(self.dev.supports_capture()) self.assertTrue(self.dev.has_storage()) + def test_duplicate_enroll(self): + self.enroll_print('testprint', FPrint.Finger.LEFT_LITTLE) + with self.assertRaises(GLib.Error) as error: + self.enroll_print('testprint', FPrint.Finger.LEFT_LITTLE) + self.assertTrue(error.exception.matches(FPrint.DeviceError.quark(), + FPrint.DeviceError.DATA_DUPLICATE)) + def test_list_empty(self): self.assertFalse(self.dev.list_prints_sync())