diff options
author | FdaSilvaYY <fdasilvayy@gmail.com> | 2016-06-27 22:42:25 +0200 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2016-07-05 17:45:58 +0100 |
commit | 4aed8756d86e2b934e83d916e57bee91c83c4b28 (patch) | |
tree | d297e500f30e4c35d2236891b2c2f622fe14712d /crypto/ct/ct_b64.c | |
parent | e57036f2bf810e807700c80d8ff4f7d100890100 (diff) |
Improve some error management code in CT
Separate invalid input case from any internal (malloc) failure
Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
Diffstat (limited to 'crypto/ct/ct_b64.c')
-rw-r--r-- | crypto/ct/ct_b64.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/crypto/ct/ct_b64.c b/crypto/ct/ct_b64.c index d6279d2298..9cf7c51be3 100644 --- a/crypto/ct/ct_b64.c +++ b/crypto/ct/ct_b64.c @@ -115,17 +115,26 @@ SCT *SCT_new_from_base64(unsigned char version, const char *logid_base64, return NULL; } -CTLOG *CTLOG_new_from_base64(const char *pkey_base64, const char *name) +/* + * This methods returns: 1 on Success, + * 0 on decoding failure, + * -1 on internal (malloc) failure, or invalid parameter if any. + */ +int CTLOG_new_from_base64(CTLOG **ct_log, const char *pkey_base64, const char *name) { unsigned char *pkey_der = NULL; int pkey_der_len = ct_base64_decode(pkey_base64, &pkey_der); const unsigned char *p; EVP_PKEY *pkey = NULL; - CTLOG *log = NULL; + + if (ct_log == NULL) { + CTerr(CT_F_CTLOG_NEW_FROM_BASE64, ERR_R_PASSED_INVALID_ARGUMENT); + return 0; + } if (pkey_der_len <= 0) { CTerr(CT_F_CTLOG_NEW_FROM_BASE64, CT_R_LOG_CONF_INVALID_KEY); - return NULL; + return 0; } p = pkey_der; @@ -133,14 +142,14 @@ CTLOG *CTLOG_new_from_base64(const char *pkey_base64, const char *name) OPENSSL_free(pkey_der); if (pkey == NULL) { CTerr(CT_F_CTLOG_NEW_FROM_BASE64, CT_R_LOG_CONF_INVALID_KEY); - return NULL; + return 0; } - log = CTLOG_new(pkey, name); - if (log == NULL) { + *ct_log = CTLOG_new(pkey, name); + if (*ct_log == NULL) { EVP_PKEY_free(pkey); - return NULL; + return -1; } - return log; + return 1; } |