From 037dea9dd5eac7a74df0e12cb437e71fb0732afa Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Mon, 11 Nov 2013 16:41:43 +0900 Subject: [PATCH] scd: more pinpad fix. * scd/apdu.c (check_pcsc_pinpad): Set ->minlen and ->maxlen only when those are specified. (pcsc_pinpad_modify): Remove old check code. -- GnuPG-bug-id: 1549 --- scd/apdu.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/scd/apdu.c b/scd/apdu.c index e0127d804..961c4191f 100644 --- a/scd/apdu.c +++ b/scd/apdu.c @@ -2177,8 +2177,11 @@ check_pcsc_pinpad (int slot, int command, pininfo_t *pininfo) { int r; - pininfo->minlen = reader_table[slot].pcsc.pinmin; - pininfo->maxlen = reader_table[slot].pcsc.pinmax; + if (reader_table[slot].pcsc.pinmin >= 0) + pininfo->minlen = reader_table[slot].pcsc.pinmin; + + if (reader_table[slot].pcsc.pinmax >= 0) + pininfo->maxlen = reader_table[slot].pcsc.pinmax; if ((command == ISO7816_VERIFY && reader_table[slot].pcsc.verify_ioctl != 0) || (command == ISO7816_CHANGE_REFERENCE_DATA @@ -2303,12 +2306,6 @@ pcsc_pinpad_modify (int slot, int class, int ins, int p0, int p1, if (!pininfo->maxlen) pininfo->maxlen = 15; - /* Note that the 25 is the maximum value the SPR532 allows. */ - if (pininfo->minlen < 1 || pininfo->minlen > 25 - || pininfo->maxlen < 1 || pininfo->maxlen > 25 - || pininfo->minlen > pininfo->maxlen) - return SW_HOST_INV_VALUE; - pin_modify = xtrymalloc (len); if (!pin_modify) return SW_HOST_OUT_OF_CORE;