diff options
author | Dr. David von Oheimb <David.von.Oheimb@siemens.com> | 2021-01-21 12:36:58 +0100 |
---|---|---|
committer | Dr. David von Oheimb <dev@ddvo.net> | 2021-02-22 08:49:52 +0100 |
commit | 7f90026b3fca9cfd3d9098d358d949d37509a2e5 (patch) | |
tree | d91a6f22702f8977560f7ffec75ac0e10e942bc9 /crypto/cmp | |
parent | 4718326a46ad460fefc5cc240a8599af4b5993c7 (diff) | |
download | openssl-new-7f90026b3fca9cfd3d9098d358d949d37509a2e5.tar.gz |
Handle NULL result of ERR_reason_error_string() in some apps
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/13920)
Diffstat (limited to 'crypto/cmp')
-rw-r--r-- | crypto/cmp/cmp_util.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/crypto/cmp/cmp_util.c b/crypto/cmp/cmp_util.c index d246047943..81c7d02d88 100644 --- a/crypto/cmp/cmp_util.c +++ b/crypto/cmp/cmp_util.c @@ -155,12 +155,27 @@ void OSSL_CMP_print_errors_cb(OSSL_CMP_log_cb_t log_fn) while ((err = ERR_get_error_all(&file, &line, &func, &data, &flags)) != 0) { const char *component = improve_location_name(func, ERR_lib_error_string(err)); + unsigned long reason = ERR_GET_REASON(err); + const char *rs = NULL; + char rsbuf[256]; + +#ifndef OPENSSL_NO_ERR + if (ERR_SYSTEM_ERROR(err)) { + if (openssl_strerror_r(reason, rsbuf, sizeof(rsbuf))) + rs = rsbuf; + } else { + rs = ERR_reason_error_string(err); + } +#endif + if (rs == NULL) { + BIO_snprintf(rsbuf, sizeof(rsbuf), "reason(%lu)", reason); + rs = rsbuf; + } + if (data != NULL && (flags & ERR_TXT_STRING) != 0) + BIO_snprintf(msg, sizeof(msg), "%s:%s", rs, data); + else + BIO_snprintf(msg, sizeof(msg), "%s", rs); - if (!(flags & ERR_TXT_STRING)) - data = NULL; - BIO_snprintf(msg, sizeof(msg), "%s%s%s", ERR_reason_error_string(err), - data == NULL || *data == '\0' ? "" : " : ", - data == NULL ? "" : data); if (log_fn == NULL) { #ifndef OPENSSL_NO_STDIO BIO *bio = BIO_new_fp(stderr, BIO_NOCLOSE); |