- Avoid segfaults: if we cannot parse the certificate, do not create a
cert object. git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@735 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
021ea9c0c3
commit
08f4d67cec
|
@ -138,15 +138,21 @@ pkcs15_add_cert_object(struct sc_pkcs11_slot *slot,
|
||||||
struct sc_pkcs15_object *cert,
|
struct sc_pkcs15_object *cert,
|
||||||
CK_OBJECT_HANDLE_PTR pHandle)
|
CK_OBJECT_HANDLE_PTR pHandle)
|
||||||
{
|
{
|
||||||
|
struct sc_pkcs15_cert_info *p15_info;
|
||||||
|
struct sc_pkcs15_cert *p15_cert;
|
||||||
struct pkcs15_cert_object *object;
|
struct pkcs15_cert_object *object;
|
||||||
struct pkcs15_cert_key_object *obj2;
|
struct pkcs15_cert_key_object *obj2;
|
||||||
|
|
||||||
|
p15_info = (struct sc_pkcs15_cert_info *) cert->data;
|
||||||
|
if (sc_pkcs15_read_certificate(card, p15_info, &p15_cert) < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
/* Certificate object */
|
/* Certificate object */
|
||||||
object = (struct pkcs15_cert_object*) calloc(1, sizeof(struct pkcs15_cert_object));
|
object = (struct pkcs15_cert_object*) calloc(1, sizeof(struct pkcs15_cert_object));
|
||||||
object->object.ops = &pkcs15_cert_ops;
|
object->object.ops = &pkcs15_cert_ops;
|
||||||
object->certificate_object = cert;
|
object->certificate_object = cert;
|
||||||
object->certificate_info = (struct sc_pkcs15_cert_info*) cert->data;
|
object->certificate_info = p15_info;
|
||||||
sc_pkcs15_read_certificate(card, object->certificate_info, &object->certificate);
|
object->certificate = p15_cert;
|
||||||
pool_insert(&slot->object_pool, object, pHandle);
|
pool_insert(&slot->object_pool, object, pHandle);
|
||||||
|
|
||||||
/* Corresponding public key */
|
/* Corresponding public key */
|
||||||
|
@ -154,7 +160,7 @@ pkcs15_add_cert_object(struct sc_pkcs11_slot *slot,
|
||||||
obj2->object.ops = &pkcs15_cert_key_ops;
|
obj2->object.ops = &pkcs15_cert_key_ops;
|
||||||
obj2->key = &object->certificate->key;
|
obj2->key = &object->certificate->key;
|
||||||
obj2->certificate_object = cert;
|
obj2->certificate_object = cert;
|
||||||
obj2->certificate_info = (struct sc_pkcs15_cert_info*) cert->data;
|
obj2->certificate_info = p15_info;
|
||||||
pool_insert(&slot->object_pool, obj2, NULL);
|
pool_insert(&slot->object_pool, obj2, NULL);
|
||||||
|
|
||||||
/* Mark as seen */
|
/* Mark as seen */
|
||||||
|
|
Loading…
Reference in New Issue