mcrd: converted assert to proper error handling

This commit is contained in:
Frank Morgner 2018-07-02 10:07:53 +02:00 committed by Jakub Jelen
parent 78f0055338
commit 92a98cb3bb
1 changed files with 22 additions and 11 deletions

View File

@ -149,7 +149,8 @@ static struct df_info_s *get_df_info(sc_card_t * card)
struct mcrd_priv_data *priv = DRVDATA(card); struct mcrd_priv_data *priv = DRVDATA(card);
struct df_info_s *dfi; struct df_info_s *dfi;
assert(!priv->is_ef); if(!(!priv->is_ef))
return NULL;
if (!priv->curpathlen) { if (!priv->curpathlen) {
sc_log(ctx, "no current path to find the df_info\n"); sc_log(ctx, "no current path to find the df_info\n");
@ -202,7 +203,8 @@ static int mcrd_delete_ref_to_authkey(sc_card_t * card)
int r; int r;
u8 sbuf[SC_MAX_APDU_BUFFER_SIZE]; u8 sbuf[SC_MAX_APDU_BUFFER_SIZE];
assert(card != NULL); if(!(card != NULL))
return SC_ERROR_INTERNAL;
sc_format_apdu(card, &apdu, SC_APDU_CASE_3_SHORT, 0x22, 0x41, 0xA4); sc_format_apdu(card, &apdu, SC_APDU_CASE_3_SHORT, 0x22, 0x41, 0xA4);
sbuf[0] = 0x83; sbuf[0] = 0x83;
@ -220,7 +222,8 @@ static int mcrd_delete_ref_to_signkey(sc_card_t * card)
sc_apdu_t apdu; sc_apdu_t apdu;
int r; int r;
u8 sbuf[SC_MAX_APDU_BUFFER_SIZE]; u8 sbuf[SC_MAX_APDU_BUFFER_SIZE];
assert(card != NULL); if(!(card != NULL))
return SC_ERROR_INTERNAL;
sc_format_apdu(card, &apdu, SC_APDU_CASE_3_SHORT, 0x22, 0x41, 0xB6); sc_format_apdu(card, &apdu, SC_APDU_CASE_3_SHORT, 0x22, 0x41, 0xB6);
@ -242,7 +245,8 @@ static int mcrd_set_decipher_key_ref(sc_card_t * card, int key_reference)
int r; int r;
u8 sbuf[SC_MAX_APDU_BUFFER_SIZE]; u8 sbuf[SC_MAX_APDU_BUFFER_SIZE];
u8 keyref_data[SC_ESTEID_KEYREF_FILE_RECLEN]; u8 keyref_data[SC_ESTEID_KEYREF_FILE_RECLEN];
assert(card != NULL); if(!(card != NULL))
return SC_ERROR_INTERNAL;
sc_format_apdu(card, &apdu, SC_APDU_CASE_3_SHORT, 0x22, 0x41, 0xB8); sc_format_apdu(card, &apdu, SC_APDU_CASE_3_SHORT, 0x22, 0x41, 0xB8);
/* track the active keypair */ /* track the active keypair */
@ -956,7 +960,8 @@ select_file_by_path(sc_card_t * card, unsigned short *pathptr,
SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_VERBOSE); SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_VERBOSE);
assert(!priv->curpathlen || priv->curpath[0] == MFID); if (!(!priv->curpathlen || priv->curpath[0] == MFID))
return SC_ERROR_INTERNAL;
if (pathlen && *pathptr == 0x3FFF) { if (pathlen && *pathptr == 0x3FFF) {
pathlen--; pathlen--;
@ -997,7 +1002,8 @@ select_file_by_path(sc_card_t * card, unsigned short *pathptr,
/* This EF or DF was already selected, but /* This EF or DF was already selected, but
we need to get the FCI, so we have we need to get the FCI, so we have
to select again. */ to select again. */
assert(priv->curpathlen > 1); if (!(priv->curpathlen > 1))
return SC_ERROR_INTERNAL;
priv->curpathlen--; priv->curpathlen--;
priv->is_ef = 0; priv->is_ef = 0;
r = select_down(card, pathptr + pathlen - 1, 1, r = select_down(card, pathptr + pathlen - 1, 1,
@ -1022,7 +1028,8 @@ select_file_by_path(sc_card_t * card, unsigned short *pathptr,
priv->is_ef = 0; priv->is_ef = 0;
} }
if (priv->is_ef) { if (priv->is_ef) {
assert(priv->curpathlen > 1); if(!(priv->curpathlen > 1))
return SC_ERROR_INTERNAL;
priv->curpathlen--; priv->curpathlen--;
priv->is_ef = 0; priv->is_ef = 0;
} }
@ -1040,7 +1047,8 @@ select_file_by_fid(sc_card_t * card, unsigned short *pathptr,
SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_VERBOSE); SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_VERBOSE);
assert(!priv->curpathlen || priv->curpath[0] == MFID); if (!(!priv->curpathlen || priv->curpath[0] == MFID))
return SC_ERROR_INTERNAL;
if (pathlen > 1) if (pathlen > 1)
return SC_ERROR_INVALID_ARGUMENTS; return SC_ERROR_INVALID_ARGUMENTS;
@ -1056,7 +1064,8 @@ select_file_by_fid(sc_card_t * card, unsigned short *pathptr,
/* There is no current file. */ /* There is no current file. */
r = SC_ERROR_INTERNAL; r = SC_ERROR_INTERNAL;
} else { } else {
assert(priv->curpathlen > 1); if (!(priv->curpathlen > 1))
return SC_ERROR_INTERNAL;
priv->curpathlen--; priv->curpathlen--;
priv->is_ef = 0; priv->is_ef = 0;
r = select_down(card, pathptr, 1, 0, file); r = select_down(card, pathptr, 1, 0, file);
@ -1081,7 +1090,8 @@ select_file_by_fid(sc_card_t * card, unsigned short *pathptr,
priv->is_ef = 0; priv->is_ef = 0;
} }
if (priv->is_ef) { if (priv->is_ef) {
assert(priv->curpathlen > 1); if (!(priv->curpathlen > 1))
return SC_ERROR_INTERNAL;
priv->curpathlen--; priv->curpathlen--;
priv->is_ef = 0; priv->is_ef = 0;
} }
@ -1209,7 +1219,8 @@ static int mcrd_set_security_env(sc_card_t * card,
u8 *p; u8 *p;
int r, locked = 0; int r, locked = 0;
assert(card != NULL && env != NULL); if (!(card != NULL && env != NULL))
return SC_ERROR_INTERNAL;
SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_NORMAL); SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_NORMAL);
/* special environment handling for esteid, stolen from openpgp */ /* special environment handling for esteid, stolen from openpgp */