diff --git a/src/libopensc/card-setcos.c b/src/libopensc/card-setcos.c index f6300c6a..de1beeb0 100644 --- a/src/libopensc/card-setcos.c +++ b/src/libopensc/card-setcos.c @@ -51,6 +51,7 @@ static const struct sc_card_driver setcos_drv = { static int setcos_finish(struct sc_card *card) { + free(DRVDATA(card)); return 0; } diff --git a/src/libopensc/card.c b/src/libopensc/card.c index 6d895142..65f5e3aa 100644 --- a/src/libopensc/card.c +++ b/src/libopensc/card.c @@ -297,6 +297,8 @@ static void sc_card_free(struct sc_card *card) free(card->app[i]->ddo); free(card->app[i]); } + if (card->ef_dir != NULL) + sc_file_free(card->ef_dir); free(card->ops); if (card->algorithms != NULL) free(card->algorithms); diff --git a/src/libopensc/pkcs15-cert.c b/src/libopensc/pkcs15-cert.c index 296d0b77..9565fc4a 100644 --- a/src/libopensc/pkcs15-cert.c +++ b/src/libopensc/pkcs15-cert.c @@ -273,6 +273,7 @@ void sc_pkcs15_free_certificate(struct sc_pkcs15_cert *cert) free(cert->key.data); free(cert->key.modulus); free(cert->issuer); + free(cert->serial); free(cert->data); free(cert); } diff --git a/src/libopensc/pkcs15.c b/src/libopensc/pkcs15.c index 6abe8553..3482d75b 100644 --- a/src/libopensc/pkcs15.c +++ b/src/libopensc/pkcs15.c @@ -108,13 +108,13 @@ static void parse_tokeninfo(struct sc_pkcs15_card *card, const u8 * buf, size_t strcat(card->serial_number, byte); } if (card->manufacturer_id == NULL) { - if (asn1_tokeninfo[2].flags & SC_ASN1_PRESENT) + if (asn1_toki[2].flags & SC_ASN1_PRESENT) card->manufacturer_id = strdup((char *) mnfid); else card->manufacturer_id = strdup("(unknown)"); } if (card->label == NULL) { - if (asn1_tokeninfo[3].flags & SC_ASN1_PRESENT) + if (asn1_toki[3].flags & SC_ASN1_PRESENT) card->label = strdup((char *) label); else card->label = strdup("(unknown)");