From 59b8a9b0da5eff6e7cf4a6f9680f17549e7b7149 Mon Sep 17 00:00:00 2001 From: frankmorgner Date: Fri, 2 Sep 2011 13:48:17 +0000 Subject: [PATCH] fixed bugs due to new version of opensc git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@517 96b47cad-a561-4643-ad3b-153ac7d7599c --- ccid/src/cats-test.c | 4 +++- ccid/src/ccid.c | 13 +++++++++++-- ccid/src/usb.c | 2 ++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ccid/src/cats-test.c b/ccid/src/cats-test.c index 8dcd577..33ca9fd 100644 --- a/ccid/src/cats-test.c +++ b/ccid/src/cats-test.c @@ -316,6 +316,7 @@ main(int argc, char *argv[]) memcpy(sendbuf+6, pin, pinlen); /* PIN */ sendbuf[6+pinlen] = 0x00; /* length certificate description */ sendbuf[7+pinlen] = 0x00; /* length certificate description */ + t_start = time(NULL); r = SCardControl(hCard, pace_ctl, sendbuf, 8+pinlen, @@ -330,7 +331,8 @@ main(int argc, char *argv[]) r = parse_EstablishPACEChannel_OutputData(recvbuf, recvlen); if (r != SCARD_S_SUCCESS) { - printb("EstablishPACEChannel", recvbuf, recvlen); + printb("EstablishPACEChannel InBuffer\n", sendbuf, 8+pinlen); + printb("EstablishPACEChannel OutBuffer\n", recvbuf, recvlen); goto err; } diff --git a/ccid/src/ccid.c b/ccid/src/ccid.c index be549e6..d3709ad 100644 --- a/ccid/src/ccid.c +++ b/ccid/src/ccid.c @@ -111,11 +111,17 @@ detect_card_presence(void) if (sc_result == 0 && card) { - sc_disconnect_card(card); + /* FIXME recent OpenSC versions throw an error when disconnecting an + * obsolete card handle + sc_disconnect_card(card); */ + card = NULL; sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "Card removed"); } if (sc_result & SC_READER_CARD_CHANGED) { - sc_disconnect_card(card); + /* FIXME recent OpenSC versions throw an error when disconnecting an + * obsolete card handle + sc_disconnect_card(card); */ + card = NULL; sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "Card exchanged"); } if (sc_result & SC_READER_CARD_PRESENT @@ -852,6 +858,9 @@ perform_PC_to_RDR_Secure_EstablishPACEChannel(sc_card_t *card, goto err; } + bin_log(ctx, SC_LOG_DEBUG_VERBOSE, "EstablishPACEChannel InBuffer", + abData, abDatalen); + if (abDatalen < parsed+1) { sc_debug(ctx, SC_LOG_DEBUG_VERBOSE, "Buffer too small, could not get PinID"); sc_result = SC_ERROR_INVALID_ARGUMENTS; diff --git a/ccid/src/usb.c b/ccid/src/usb.c index 0fb0a05..25cb3aa 100644 --- a/ccid/src/usb.c +++ b/ccid/src/usb.c @@ -1524,6 +1524,8 @@ special: if (verbose > 1) fprintf(stderr, "control loop: writing %d bytes... ", result); result = write (fd, outbuf, result); + /* TODO outbuf should also be freed on error */ + free(outbuf); if (result < 0) goto stall; if (verbose > 1)