From a1b70e2edcb9bf7f013d7790cf127c0e9d6da853 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Wed, 6 May 2009 19:04:02 +0000 Subject: [PATCH] better error handling git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@25193 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/hx509/crypto.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/hx509/crypto.c b/lib/hx509/crypto.c index 1d4c76f186d..cc427ba53b3 100644 --- a/lib/hx509/crypto.c +++ b/lib/hx509/crypto.c @@ -416,7 +416,7 @@ ecdsa_create_signature(hx509_context context, ret = set_digest_alg(signatureAlgorithm, sig_oid, "\x05\x00", 2); if (ret) { hx509_clear_error_string(context); - return ret; + goto error; } } @@ -426,13 +426,19 @@ ecdsa_create_signature(hx509_context context, data, NULL, &indata); + if (ret) { + if (signatureAlgorithm) + free_AlgorithmIdentifier(signatureAlgorithm); + goto error; + } sig->length = ECDSA_size(signer->private_key.ecdsa); sig->data = malloc(sig->length); if (sig->data == NULL) { der_free_octet_string(&indata); - hx509_set_error_string(context, 0, ENOMEM, "out of memory"); - return ENOMEM; + ret = ENOMEM; + hx509_set_error_string(context, 0, ret, "out of memory"); + goto error; } siglen = sig->length; @@ -441,9 +447,10 @@ ecdsa_create_signature(hx509_context context, sig->data, &siglen, signer->private_key.ecdsa); der_free_octet_string(&indata); if (ret != 1) { - hx509_set_error_string(context, 0, HX509_CMS_FAILED_CREATE_SIGATURE, + ret = HX509_CMS_FAILED_CREATE_SIGATURE; + hx509_set_error_string(context, 0, ret, "ECDSA sign failed: %d", ret); - return HX509_CMS_FAILED_CREATE_SIGATURE; + goto error; } if (siglen > sig->length) _hx509_abort("ECDSA signature prelen longer the output len"); @@ -451,6 +458,10 @@ ecdsa_create_signature(hx509_context context, sig->length = siglen; return 0; + error: + if (signatureAlgorithm) + free_AlgorithmIdentifier(signatureAlgorithm); + return ret; } static int -- 2.11.4.GIT