some more error checks in minidriver in regards to card ejects

This commit is contained in:
Andreas Kemnade 2015-05-08 15:49:30 +02:00 committed by Viktor Tarasov
parent 492ffe0fd7
commit 6a6ef61d1a
1 changed files with 15 additions and 3 deletions

View File

@ -319,7 +319,7 @@ static void print_werror(PCARD_DATA pCardData, PSTR str)
static int
check_reader_status(PCARD_DATA pCardData)
{
int r;
int r = SCARD_S_SUCCESS;
VENDOR_SPECIFIC *vs = NULL;
logprintf(pCardData, 4, "check_reader_status\n");
@ -340,6 +340,8 @@ check_reader_status(PCARD_DATA pCardData)
r = disassociate_card(pCardData);
logprintf(pCardData, 1, "disassociate_card r = 0x%08X\n", r);
r = associate_card(pCardData); /* need to check return codes */
if (r != SCARD_S_SUCCESS)
return r;
logprintf(pCardData, 1, "associate_card r = 0x%08X\n", r);
/* Rebuild 'soft' fs - in case changed */
r = md_fs_init(pCardData);
@ -351,7 +353,7 @@ check_reader_status(PCARD_DATA pCardData)
logprintf(pCardData, 2, "check_reader_status r=%d flags 0x%08X\n", r, vs->reader->flags);
}
return SCARD_S_SUCCESS;
return r;
}
static DWORD
@ -1274,6 +1276,9 @@ md_fs_read_content(PCARD_DATA pCardData, char *parent, struct md_file *file)
logprintf(pCardData, 2, "directory '%s' not found\n", parent ? parent : "<null>");
return;
}
if (vs->p15card == NULL) {
return SCARD_F_INTERNAL_ERROR;
}
if (!strcmp(dir->name, "mscp")) {
int idx, rv;
@ -2585,6 +2590,10 @@ DWORD WINAPI CardGetContainerInfo(__in PCARD_DATA pCardData, __in BYTE bContaine
return SCARD_E_NO_KEY_CONTAINER;
}
if (vs->p15card == NULL) {
return SCARD_F_INTERNAL_ERROR;
}
check_reader_status(pCardData);
pubkey_der.value = NULL;
pubkey_der.len = 0;
@ -3667,7 +3676,10 @@ DWORD WINAPI CardAuthenticateEx(__in PCARD_DATA pCardData,
vs = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific);
check_reader_status(pCardData);
r = check_reader_status(pCardData);
if ((vs->p15card) == NULL)
return SCARD_F_INTERNAL_ERROR;
if (dwFlags == CARD_AUTHENTICATE_GENERATE_SESSION_PIN || dwFlags == CARD_AUTHENTICATE_SESSION_PIN) {
if (! (vs->reader->capabilities & SC_READER_CAP_PIN_PAD))