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.
This commit is contained in:
Zoltan Kelemen 2020-07-03 09:23:54 +02:00 committed by Frank Morgner
parent 1dc359cb61
commit afffeccc29
1 changed files with 3 additions and 3 deletions

View File

@ -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;
}