From 893be0d9c09ca97cb85d9f785b282a5723d322da Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Tue, 15 Jan 2019 10:07:20 +0100 Subject: [PATCH] fixed memory leaks --- src/libopensc/card-mcrd.c | 5 ++++- src/libopensc/card-piv.c | 15 +++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/libopensc/card-mcrd.c b/src/libopensc/card-mcrd.c index 7784f15b..db67f37a 100644 --- a/src/libopensc/card-mcrd.c +++ b/src/libopensc/card-mcrd.c @@ -367,8 +367,11 @@ static int mcrd_init(sc_card_t * card) sc_format_path ("3f00", &tmppath); r = sc_select_file (card, &tmppath, NULL); - if (r < 0) + if (r < 0) { + free(card->drv_data); + card->drv_data = NULL; r = SC_ERROR_INVALID_CARD; + } /* Not needed for the fixed EstEID profile */ if (!is_esteid_card(card)) diff --git a/src/libopensc/card-piv.c b/src/libopensc/card-piv.c index 3298a688..0e56d455 100644 --- a/src/libopensc/card-piv.c +++ b/src/libopensc/card-piv.c @@ -1091,12 +1091,15 @@ piv_get_cached_data(sc_card_t * card, int enumtag, u8 **buf, size_t *buf_len) priv->obj_cache[enumtag].internal_obj_data, priv->obj_cache[enumtag].internal_obj_len); - } else if (r == 0 || r == SC_ERROR_FILE_NOT_FOUND) { - r = SC_ERROR_FILE_NOT_FOUND; - priv->obj_cache[enumtag].flags |= PIV_OBJ_CACHE_VALID; - priv->obj_cache[enumtag].obj_len = 0; - } else if ( r < 0) { - goto err; + } else { + free(rbuf); + if (r == 0 || r == SC_ERROR_FILE_NOT_FOUND) { + r = SC_ERROR_FILE_NOT_FOUND; + priv->obj_cache[enumtag].flags |= PIV_OBJ_CACHE_VALID; + priv->obj_cache[enumtag].obj_len = 0; + } else if ( r < 0) { + goto err; + } } ok: