gids: fix invalid get-gids-driver

When compiled without zlib 'get-gids-driver' returns invalid pointer.
This commit is contained in:
Viktor Tarasov 2016-04-07 19:42:16 +02:00
parent 07493c11d8
commit 77898e6175
2 changed files with 11 additions and 4 deletions

View File

@ -2039,7 +2039,7 @@ struct sc_card_driver *sc_get_gids_driver(void)
struct sc_card_driver *sc_get_gids_driver(void)
{
return SC_ERROR_WRONG_CARD;
return NULL;
}
#endif

View File

@ -112,7 +112,9 @@ static const struct _sc_driver_entry internal_card_drivers[] = {
{ "PIV-II", (void *(*)(void)) sc_get_piv_driver },
{ "itacns", (void *(*)(void)) sc_get_itacns_driver },
{ "isoApplet", (void *(*)(void)) sc_get_isoApplet_driver },
#ifdef ENABLE_ZLIB
{ "gids", (void *(*)(void)) sc_get_gids_driver },
#endif
{ "openpgp", (void *(*)(void)) sc_get_openpgp_driver },
/* The default driver should be last, as it handles all the
* unrecognized cards. */
@ -422,8 +424,7 @@ static int load_card_driver_options(sc_context_t *ctx,
return SC_SUCCESS;
}
static int load_card_drivers(sc_context_t *ctx,
struct _sc_ctx_options *opts)
static int load_card_drivers(sc_context_t *ctx, struct _sc_ctx_options *opts)
{
const struct _sc_driver_entry *ent;
int drv_count;
@ -461,8 +462,14 @@ static int load_card_drivers(sc_context_t *ctx,
}
ctx->card_drivers[drv_count] = func();
ctx->card_drivers[drv_count]->dll = dll;
if (ctx->card_drivers[drv_count] == NULL) {
sc_log(ctx, "Driver '%s' not available.", ent->name);
if (dll)
sc_dlclose(dll);
continue;
}
ctx->card_drivers[drv_count]->dll = dll;
ctx->card_drivers[drv_count]->atr_map = NULL;
ctx->card_drivers[drv_count]->natrs = 0;