diff --git a/src/libopensc/pkcs15-din-66291.c b/src/libopensc/pkcs15-din-66291.c index 241afb8a..f9c90fc4 100644 --- a/src/libopensc/pkcs15-din-66291.c +++ b/src/libopensc/pkcs15-din-66291.c @@ -260,6 +260,8 @@ sc_pkcs15emu_din_66291_init(sc_pkcs15_card_t *p15card) int sc_pkcs15emu_din_66291_init_ex(sc_pkcs15_card_t *p15card, struct sc_aid *aid) { + int r; + if (!p15card || ! p15card->card) return SC_ERROR_INVALID_ARGUMENTS; @@ -270,5 +272,13 @@ int sc_pkcs15emu_din_66291_init_ex(sc_pkcs15_card_t *p15card, struct sc_aid *aid return SC_ERROR_WRONG_CARD; /* Init card */ - return sc_pkcs15emu_din_66291_init(p15card); + r = sc_pkcs15emu_din_66291_init(p15card); + if (r != SC_SUCCESS) { + sc_pkcs15_free_tokeninfo(p15card->tokeninfo); + sc_file_free(p15card->file_tokeninfo); + p15card->tokeninfo = NULL; + p15card->file_tokeninfo = NULL; + } + + return r; }