From e971ffb48eb038202015c906adfd60f6bf7113a3 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Thu, 29 Aug 2019 11:02:50 +0200 Subject: [PATCH] fixed memory leak Credits to OSS-Fuzz --- src/libopensc/pkcs15-din-66291.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/libopensc/pkcs15-din-66291.c b/src/libopensc/pkcs15-din-66291.c index f9c90fc4..b8452b9c 100644 --- a/src/libopensc/pkcs15-din-66291.c +++ b/src/libopensc/pkcs15-din-66291.c @@ -260,7 +260,7 @@ 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; + int r = SC_ERROR_WRONG_CARD; if (!p15card || ! p15card->card) return SC_ERROR_INVALID_ARGUMENTS; @@ -268,12 +268,13 @@ int sc_pkcs15emu_din_66291_init_ex(sc_pkcs15_card_t *p15card, struct sc_aid *aid SC_FUNC_CALLED(p15card->card->ctx, 1); /* Check card */ - if (!din_66291_match_p15card(p15card, aid)) - return SC_ERROR_WRONG_CARD; + if (1 == din_66291_match_p15card(p15card, aid)) { + /* Init card */ + r = sc_pkcs15emu_din_66291_init(p15card); + } - /* Init card */ - r = sc_pkcs15emu_din_66291_init(p15card); if (r != SC_SUCCESS) { + /* reset input data to default values */ sc_pkcs15_free_tokeninfo(p15card->tokeninfo); sc_file_free(p15card->file_tokeninfo); p15card->tokeninfo = NULL;