From afffeccc298716d726e06e5c9f6cb6993d72a9cf Mon Sep 17 00:00:00 2001 From: Zoltan Kelemen Date: Fri, 3 Jul 2020 09:23:54 +0200 Subject: [PATCH] Fixed problems with PIN min/max length handling: - The wrong PIN was selected from the sc_pin_cmd_data structure. - When the PIN max value was zero from the caller (meaning unknown max), the reader max value was not used. --- src/libopensc/reader-pcsc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libopensc/reader-pcsc.c b/src/libopensc/reader-pcsc.c index 6443d2a9..44c0b0a4 100644 --- a/src/libopensc/reader-pcsc.c +++ b/src/libopensc/reader-pcsc.c @@ -2104,7 +2104,7 @@ part10_check_pin_min_max(sc_reader_t *reader, struct sc_pin_cmd_data *data) struct pcsc_global_private_data *gpriv = (struct pcsc_global_private_data *) reader->ctx->reader_drv_data; struct sc_pin_cmd_pin *pin_ref = data->flags & SC_PIN_CMD_IMPLICIT_CHANGE ? - &data->pin1 : &data->pin2; + &data->pin2 : &data->pin1; if (gpriv->fixed_pinlength != 0) { pin_ref->min_length = gpriv->fixed_pinlength; @@ -2134,11 +2134,11 @@ part10_check_pin_min_max(sc_reader_t *reader, struct sc_pin_cmd_data *data) /* maximum pin size */ r = part10_find_property_by_tag(buffer, length, PCSCv2_PART10_PROPERTY_bMaxPINSize); - if (r >= 0) + if (r > 0) { unsigned int value = r; - if (pin_ref->max_length > value) + if (!pin_ref->max_length || pin_ref->max_length > value) pin_ref->max_length = r; }