From 93622f6486f5269368379d213f263e619b07b4fa Mon Sep 17 00:00:00 2001 From: frankmorgner Date: Tue, 4 May 2010 07:57:13 +0000 Subject: [PATCH] changed length of read binary apdu to support acr 122 git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@87 96b47cad-a561-4643-ad3b-153ac7d7599c --- ccid/pace.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ccid/pace.c b/ccid/pace.c index a596c4d..531af15 100644 --- a/ccid/pace.c +++ b/ccid/pace.c @@ -222,6 +222,9 @@ static int get_ef_card_access(sc_card_t *card, __u8 **ef_cardaccess, size_t *length_ef_cardaccess) { int r; + /* we read less bytes than possible. this is a workaround for acr 122, + * which only supports apdus of max 250 bytes */ + size_t read = maxresp - 8; sc_path_t path; sc_file_t *file = NULL; __u8 *p; @@ -246,7 +249,7 @@ static int get_ef_card_access(sc_card_t *card, *length_ef_cardaccess = 0; while(1) { - p = realloc(*ef_cardaccess, *length_ef_cardaccess + maxresp); + p = realloc(*ef_cardaccess, *length_ef_cardaccess + read); if (!p) { r = SC_ERROR_OUT_OF_MEMORY; goto err; @@ -254,9 +257,9 @@ static int get_ef_card_access(sc_card_t *card, *ef_cardaccess = p; r = sc_read_binary(card, *length_ef_cardaccess, - *ef_cardaccess + *length_ef_cardaccess, maxresp, 0); + *ef_cardaccess + *length_ef_cardaccess, read, 0); - if (r > 0 && r != maxresp) { + if (r > 0 && r != read) { *length_ef_cardaccess += r; break; }